В чем основное отличие между 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
А как насчет производительности этих двух?
Насколько я могу судить, оба синтаксиса эквивалентны. Первый стандарт SQL, второй - расширение MySQL.
Таким образом, они должны быть точно эквивалентными характеристиками.
http://dev.mysql.com/doc/refman/5.6/en/insert.html говорит:
INSERT вставляет новые строки в существующую таблицу. INSERT... VALUES и INSERT... SET формы инструкции вставляют строки на основе явно заданных значений. Форма INSERT... SELECT вставляет строки, выбранные из другой таблицы или таблиц.
INSERT INTO table SET
? Это вообще возможно?
Я думаю, что расширение предназначено для аналогичного синтаксиса для вставок и обновлений. В Oracle аналогичный синтаксический трюк:
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
Так как синтаксисы эквивалентны (в любом случае 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
будет работать, тогда как другой будет. Но в большинстве практических случаев вы все-таки зацикливаете набор записей, чтобы делать вставки, хотя могут быть некоторые случаи, когда возможно построить один большой запрос, чтобы вставить кучу строк в таблицу в одном запросе, а также запрос для каждая строка может улучшить производительность. На самом деле не знаю.
INSERT INTO table SET
не является стандартным. Кажется, намного понятнее. Думаю, мне все равно придется использоватьINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
чтобы уберечь себя от проблем, если я перенесусь на Postgres ,