Antworten:
Soweit ich das beurteilen kann, sind beide Syntaxen gleichwertig. Der erste ist der SQL-Standard, der zweite ist die Erweiterung von MySQL.
Sie sollten also in Bezug auf die Leistung genau gleichwertig sein.
http://dev.mysql.com/doc/refman/5.6/en/insert.html sagt:
INSERT fügt neue Zeilen in eine vorhandene Tabelle ein. Die Formulare INSERT ... VALUES und INSERT ... SET der Anweisung fügen Zeilen basierend auf explizit angegebenen Werten ein. Das Formular INSERT ... SELECT fügt Zeilen ein, die aus einer anderen Tabelle oder Tabellen ausgewählt wurden.
INSERT INTO table SET
? Ist das überhaupt möglich?
Ich denke, die Erweiterung soll eine ähnliche Syntax für Einfügungen und Aktualisierungen ermöglichen. In Oracle ist ein ähnlicher syntaktischer Trick:
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
INSERT ... SET ...
und INSERT ... VALUES ...
. Für die Funktion haben Sie kürzeren, schneller zu schreibenden Code, eine verbesserte Lesbarkeit und die Beseitigung von Tippfehlern, die durch Verwechslung Ihrer Spaltenreihenfolge beim Schreiben Ihrer VALUES
Klausel verursacht werden. Mein Bauch sagt mir, dass im Netz das Gute das Schlechte überwiegt, aber Ihr Urteil kann abweichen.
Da die Syntaxen äquivalent sind (in MySQL jedenfalls), bevorzuge ich die INSERT INTO table SET x=1, y=2
Syntax, da es einfacher ist, Fehler in der Anweisung zu ändern und leichter abzufangen, insbesondere beim Einfügen vieler Spalten. Wenn Sie 10 oder 15 oder mehr Spalten einfügen müssen, ist es wirklich einfach, etwas mit dem zu verwechseln(x, y) VALUES (1,2)
meiner Meinung Syntax .
Wenn die Portabilität zwischen verschiedenen SQL-Standards ein Problem darstellt, ist dies möglicherweise der Fall INSERT INTO table (x, y) VALUES (1,2)
bevorzugt.
Und wenn Sie mehrere Datensätze in eine einzelne Abfrage einfügen möchten, scheint die INSERT INTO ... SET
Syntax nicht zu funktionieren, während die andere funktioniert. In den meisten praktischen Fällen durchlaufen Sie jedoch eine Reihe von Datensätzen, um Einfügungen durchzuführen. In einigen Fällen kann es jedoch vorkommen, dass Sie eine große Abfrage erstellen, um eine Reihe von Zeilen in eine Tabelle in einer Abfrage einzufügen, im Gegensatz zu einer Abfrage für Jede Zeile kann eine Leistungsverbesserung aufweisen. Weiß wirklich nicht.
INSERT INTO table SET
nicht Standard ist. Es scheint viel klarer. Ich denke, ich muss dieINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
Syntax trotzdem verwenden, um mich vor Problemen zu schützen, wenn ich auf Postgres portiere.