Відповіді:
Наскільки я можу сказати, обидва синтаксису рівноцінні. Перший - стандарт 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)
INSERT ... SET ...
і INSERT ... VALUES ...
. Для цієї функції ви маєте коротший, швидший для запису код, підвищену читабельність та усунення помилок друку, викликаних змішуванням порядку вашого стовпця під час написання VALUES
пропозиції. Моя кишка говорить мені, що в мережі добро переважає погане, але ваше судження може відрізнятися.
Оскільки синтаксиси еквівалентні (у 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.