Mysql
 sql >> Database >  >> RDS >> Mysql

Come inserire dati in più tabelle con dipendenze di chiavi esterne coinvolte (MySQL)

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;