Encontré uno usando un disparador:
Si tiene una serie complicada de inserciones o actualizaciones que deben realizarse en una transacción, puede hacerlo en el código de la aplicación, o
Puedes crear un blackhole
'grande' tabla con suficientes filas para contener todos los valores.
Y crea un disparador como:
DELIMITER $$
CREATE TRIGGER ai_bh_table_each AFTER INSERT ON bh_table FOR EACH ROW
BEGIN
DECLARE lastid1 integer;
INSERT INTO table1 VALUES (null, new.field1, new.field2);
SELECT LAST_INSERT_ID() INTO lastid1;
INSERT INTO table2 VALUES (null, new.field3, lastid1);
....
END$$
DELIMITER ;
Si incluye un código de verificación de errores, incluso puede simular transacciones en motores que no lo admiten, como MyISAM.