1. Las tablas referenciadas SIEMPRE se cargan primero. Si el dato del campo dependiente no está en la tabla a que hace referencia siempre te va a dar un error porque ese dato debe existir primero. No pueden colocarse al mismo tiempo.
2. No has colocado la línea de START TRANSACTION; por lo que la transacción jamás ha iniciado y la operación se halla en estado AUTOCOMMIT. Mira bien el manual de referencia:
13.4.1. Sintaxis de START TRANSACTION, COMMIT y ROLLBACK