Подтвердить что ты не робот

MySQL INSERT INTO table VALUES.. vs INSERT INTO table SET

В чем основное отличие между 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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)

Ответ 3

Так как синтаксисы эквивалентны (в любом случае 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 будет работать, тогда как другой будет. Но в большинстве практических случаев вы все-таки зацикливаете набор записей, чтобы делать вставки, хотя могут быть некоторые случаи, когда возможно построить один большой запрос, чтобы вставить кучу строк в таблицу в одном запросе, а также запрос для каждая строка может улучшить производительность. На самом деле не знаю.