it-swarm.com.de

MySQL INSERT INTO Tabelle VALUES .. vs INSERT INTO Tabelle SET

Was ist der Hauptunterschied zwischen INSERT INTO table VALUES .. und INSERT INTO table SET?

Beispiel:

INSERT INTO table (a, b, c) VALUES (1,2,3)

INSERT INTO table SET a=1, b=2, c=3

Und was ist mit der Leistung dieser beiden?

237
Irmantas

Soweit ich das beurteilen kann, sind beide Syntaxen gleichwertig. Das erste ist der SQL-Standard, das zweite ist die Erweiterung von MySQL.

Sie sollten also in Bezug auf die Leistung genau gleich sein.

http://dev.mysql.com/doc/refman/5.6/en/insert.html sagt:

INSERT fügt neue Zeilen in eine vorhandene Tabelle ein. Die Formen INSERT ... VALUES und INSERT ... SET der Anweisung fügen Zeilen basierend auf explizit angegebenen Werten ein. Das INSERT ... SELECT-Formular fügt Zeilen ein, die aus einer anderen Tabelle oder Tabellen ausgewählt wurden.

184
Vinko Vrsalovic

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)
15
user69173

Da die Syntax äquivalent ist (in MySQL jedenfalls), bevorzuge ich die Syntax INSERT INTO table SET x=1, y=2, Da es einfacher ist, Änderungen vorzunehmen und Fehler in der Anweisung zu erkennen, insbesondere beim Einfügen vieler Spalten. Wenn Sie 10 oder 15 oder mehr Spalten einfügen müssen, ist es meiner Meinung nach wirklich einfach, etwas mit der Syntax (x, y) VALUES (1,2) Zu verwechseln.

Wenn die Portabilität zwischen verschiedenen SQL-Standards ein Problem darstellt, ist möglicherweise INSERT INTO table (x, y) VALUES (1,2) vorzuziehen.

Und wenn Sie mehrere Datensätze in eine einzelne Abfrage einfügen möchten, scheint die Syntax INSERT INTO ... SET 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 vorzunehmen. In einigen Fällen kann es jedoch vorkommen, dass eine große Abfrage erstellt wird, um eine Reihe von Zeilen in eine Tabelle in einer Abfrage einzufügen, im Gegensatz zu einer Abfrage für Jede Zeile hat möglicherweise eine Leistungsverbesserung. Ich weiß es wirklich nicht.

4