Jaka jest główna różnica między INSERT INTO table VALUES ..
i INSERT INTO table SET
?
Przykład:
INSERT INTO table (a, b, c) VALUES (1,2,3)
INSERT INTO table SET a=1, b=2, c=3
A co z wydajnością tych dwóch?
sql
mysql
performance
Irmantas
źródło
źródło
INSERT INTO table SET
to nietypowe. Wydaje się to o wiele wyraźniejsze. Myślę, że i tak będę musiał użyć tejINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
składni, aby uchronić się przed problemami, jeśli prześlę port do Postgres.Odpowiedzi:
O ile wiem, obie składnie są równoważne. Pierwszy to standard SQL, drugi to rozszerzenie MySQL.
Dlatego powinny być dokładnie równoważne pod względem wydajności.
http://dev.mysql.com/doc/refman/5.6/en/insert.html mówi:
źródło
INSERT INTO table SET
? Czy to w ogóle możliwe?Myślę, że rozszerzenie ma umożliwić podobną składnię dla wstawek i aktualizacji. W Oracle podobna sztuczka składniowa to:
źródło
INSERT ... SET ...
iINSERT ... VALUES ...
. W przypadku funkcji masz krótszy, szybszy do pisania kod, zwiększoną czytelność i eliminację literówek spowodowanych pomieszaniem kolejności kolumn podczas pisaniaVALUES
klauzuli. Mój żołądek mówi mi, że w sieci dobro przeważa nad złem, ale twój osąd może się różnić.Ponieważ składnie są równoważne (w każdym razie w MySQL), wolę tę
INSERT INTO table SET x=1, y=2
składnię, ponieważ łatwiej jest ją modyfikować i łatwiej wychwycić błędy w instrukcji, szczególnie przy wstawianiu wielu kolumn. Jeśli musisz wstawić 10 lub 15 lub więcej kolumn,(x, y) VALUES (1,2)
moim zdaniem naprawdę łatwo jest coś pomieszać przy użyciu składni.Jeśli problemem jest przenośność między różnymi standardami SQL, być może
INSERT INTO table (x, y) VALUES (1,2)
byłby preferowany.A jeśli chcesz wstawić wiele rekordów w jednym zapytaniu, nie wydaje się, żeby
INSERT INTO ... SET
składnia działała, podczas gdy drugi będzie. Ale w większości praktycznych przypadków przeglądasz zestaw rekordów, aby mimo to wstawiać, chociaż mogą istnieć przypadki, w których może być budowanie jednego dużego zapytania w celu wstawienia wiązki wierszy do tabeli w jednym zapytaniu w porównaniu do zapytania dla każdy wiersz może mieć poprawę wydajności. Naprawdę nie wiem.źródło