Trovato uno usando un trigger:
Se hai una serie complicata di inserimenti o aggiornamenti che devono essere eseguiti in una transazione, puoi farlo nel codice dell'applicazione oppure
Puoi creare un "grande" blackhole
tabella con righe sufficienti per contenere tutti i valori.
E crea un trigger come:
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 ;
Se includi il codice di controllo degli errori puoi persino simulare transazioni su motori che non lo supportano, come MyISAM.