MySQL INSERT INTO таблица VALUES .. против INSERT INTO таблица SET - PullRequest
235 голосов
/ 14 мая 2009

В чем основная разница между INSERT INTO table VALUES .. и INSERT INTO table SET?

Пример:

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

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

А как насчет производительности этих двух?

Ответы [ 3 ]

184 голосов
/ 14 мая 2009

Насколько я могу судить, оба синтаксиса эквивалентны. Первый - стандарт SQL, второй - расширение MySQL.

Таким образом, они должны быть точно эквивалентны по производительности.

http://dev.mysql.com/doc/refman/5.6/en/insert.html говорит:

INSERT вставляет новые строки в существующую таблицу. Формы оператора INSERT ... VALUES и INSERT ... SET вставляют строки на основе явно указанных значений. Форма INSERT ... SELECT вставляет строки, выбранные из другой таблицы или таблиц.

15 голосов
/ 01 января 2010

Я думаю, что расширение предназначено, чтобы позволить подобный синтаксис для вставок и обновлений. В Oracle похожая синтаксическая хитрость:

UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
3 голосов
/ 24 октября 2017

Поскольку синтаксис эквивалентен (во всяком случае, в MySQL), я предпочитаю синтаксис INSERT INTO table SET x=1, y=2, поскольку его легче модифицировать и легче отлавливать ошибки в операторе, особенно при вставке большого количества столбцов. Если вам нужно вставить 10 или 15 или более столбцов, то, на мой взгляд, действительно легко что-то перепутать, используя синтаксис (x, y) VALUES (1,2).

Если переносимость между различными стандартами SQL является проблемой, тогда, возможно, INSERT INTO table (x, y) VALUES (1,2) предпочтительнее.

И если вы хотите вставить несколько записей в одном запросе, не похоже, что синтаксис INSERT INTO ... SET будет работать, тогда как другой будет работать. Но в большинстве практических случаев вы циклически просматриваете набор записей для вставки в любом случае, хотя могут быть случаи, когда, возможно, создается один большой запрос для вставки набора строк в таблицу в одном запросе по сравнению с запросом для каждая строка может иметь улучшение производительности. На самом деле не знаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...