Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So fügen Sie Daten in mehrere Tabellen mit beteiligten Fremdschlüsselabhängigkeiten ein (MySQL)

Kurz gesagt, Sie möchten Transaktionen (weitere Dokumentation dazu) damit Ihre Einfügungen atomar sind . Nur so kann garantiert werden, dass alle (oder keine) Ihrer Daten eingefügt werden. Andernfalls können Sie in die von Ihnen beschriebene Situation geraten, in der die Datenbank nach einigen Einfügungen nicht mehr verfügbar ist und andere nicht abgeschlossen werden können. Eine Transaktion teilt der Datenbank mit, dass es sich bei dem, was Sie tun, um alles oder nichts handelt, und sollte daher zurückgesetzt werden, wenn etwas schief geht.

Wenn Sie synthetische Primärschlüssel verwenden, bieten PHP und andere Sprachen Mechanismen zum Abrufen der zuletzt eingefügten ID. Wenn Sie dies vollständig in MySQL tun möchten, können Sie den LAST_INSERT_ID() Funktion. Am Ende erhalten Sie Code wie diesen:

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;