sql >> Databasteknik >  >> RDS >> Mysql

Hur man infogar data i flera tabeller med inblandade främmande nyckelberoenden (MySQL)

Kort sagt, du vill använda transaktioner (mer dokument om detta) så att dina inlägg är atomära . Detta är det enda sättet att garantera att all (eller ingen) av dina uppgifter kommer att infogas. Annars kan du hamna i den situation du beskriver där databasen blir otillgänglig efter vissa insättningar och andra inte kan slutföra. En transaktion talar om för databasen att det du gör är allt-eller-inget och därför bör den rullas tillbaka om något går fel.

När du använder syntetiska primärnycklar, som du är, tillhandahåller PHP och andra språk mekanismer för att få det senast infogade ID:t. Om du vill göra det helt i MySQL kan du använda LAST_INSERT_ID() fungera. Du kommer att få kod så här:

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;



  1. MySQL välj rader från exakt 7 dagar sedan

  2. Ej effektiv exekveringsplan tagen av MySQL InnoDB

  3. Finns det något sätt att använda ARRAYs i Entity Framework + PostgreSql

  4. Hur man gör automatisk mysql db backup med mysql workbench