Stručně řečeno, chcete používat transakce (další dokument o tomto) aby vaše vložky byly atomové . Toto je jediný způsob, jak zaručit, že budou vložena všechna (nebo žádná) vaše data. V opačném případě se můžete dostat do situace, kterou popisujete, kdy databáze po některých vloženích přestane být dostupná a jiná se nebudou moci dokončit. Transakce říká databázi, že to, co děláte, je všechno nebo nic, a tak by se měla vrátit zpět, pokud se něco pokazí.
Když používáte syntetické primární klíče, jako vy, PHP a další jazyky poskytují mechanismy pro získání posledního vloženého id. Pokud to chcete dělat výhradně v MySQL, můžete použít LAST_INSERT_ID() funkce. Skončíte s kódem takto:
START TRANSACTION;
INSERT INTO foo (auto,text)
VALUES(NULL,'text'); # generate ID by inserting NULL
INSERT INTO foo2 (id,text)
VALUES(LAST_INSERT_ID(),'text'); # use ID in second table
COMMIT;