Накратко, искате да използвате транзакции (още документ за това) така че вашите вложки да са атомни . Това е единственият начин да гарантирате, че всички (или нито една) от вашите данни ще бъдат вмъкнати. В противен случай можете да влезете в ситуацията, която описвате, когато базата данни става недостъпна след някои вмъквания, а други не могат да завършат. Транзакцията казва на базата данни, че това, което правите, е всичко или нищо и затова трябва да се върне, ако нещо се обърка.
Когато използвате синтетични първични ключове, каквито сте, PHP и други езици предоставят механизми за получаване на последния вмъкнат идентификатор. Ако искате да го направите изцяло в MySQL, можете да използвате LAST_INSERT_ID() функция. В крайна сметка ще получите код като този:
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;