2010-02-03 12 views

Odpowiedz

9

Nie można wykonać wielu wstawek w dwóch tabelach w jednym zapytaniu.

2

Być może w przyszłej wersji MySQL można utworzyć widok zawierający 2 tabele i wstawić do niego.
Ale z MySQL 5.1.41 dostaniesz błąd:
„Nie można zmodyfikować więcej niż jedną tabelę bazową poprzez sprzężenie widzenia”

Ale wstawienie do 2 stoliki z 1 zapytanie jest dziwna rzecz do, i Nie polecam tego.


Aby uzyskać więcej informacji na temat uaktualnianych widoków, sprawdź numer MySQL reference.

+0

Nie jest dziwne, że chcemy zaktualizować (lub wstawić) wiele tabel jako część pojedynczej operacji atomowej (to znaczy wszystko, co się dzieje). Im bardziej znormalizowana jest twoja baza danych, tym bardziej prawdopodobne są jej potrzeby. Trzeba tylko chronić wiele aktualizacji w transakcji db. –

+0

Prawda, ale gdy zobaczę * pojedynczą instrukcję wstawiania, przyjmę, że dotyczy to tylko jednej tabeli. Część "dziwna" odnosi się do aspektu 1 zapytania. –

3

Możesz wywołać procedurę przechowywaną z wstawkami w dwóch tabelach.

+0

Odpowiedź brzmi: tak i tak to robisz. Przydaje się, gdy masz długie opóźnienie do DB, aby przenikać kilka insertów do jednej instrukcji. – Mark

4

Nie, nie możesz.

Jeśli chcesz zapewnić atomowość operacji wymagającej umieszczenia danych w 2 tabelach, powinieneś ją zabezpieczyć w transakcji. Możesz użyć instrukcji SQL BEGIN TRAN i COMMIT TRAN lub użyć granicy transakcji w dowolnym języku, którego używasz do opracowania warstwy dostępu db. Na przykład. coś podobnego do Connection.StartTransaction i Connection.Commit (lub Connection.Rollback w przypadku błędu).

Powiązane problemy