In breve, vuoi utilizzare transazioni (altro documento su questo) in modo che i tuoi inserti siano atomici . Questo è l'unico modo per garantire che tutti (o nessuno) dei tuoi dati vengano inseriti. Altrimenti, puoi entrare nella situazione che descrivi in cui il database diventa non disponibile dopo che alcuni inserimenti e altri non possono essere completati. Una transazione dice al database che quello che stai facendo è tutto o niente e quindi dovrebbe tornare indietro se qualcosa va storto.
Quando si utilizzano chiavi primarie sintetiche, come te, PHP e altri linguaggi forniscono meccanismi per ottenere l'ultimo ID inserito. Se vuoi farlo interamente in MySQL puoi usare LAST_INSERT_ID() funzione. Ti ritroverai con un codice come questo:
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;