Respuestas:
Por lo que puedo decir, ambas sintaxis son equivalentes. El primero es el estándar SQL, el segundo es la extensión de MySQL.
Por lo tanto, deberían ser exactamente equivalentes en cuanto a rendimiento.
http://dev.mysql.com/doc/refman/5.6/en/insert.html dice:
INSERT inserta nuevas filas en una tabla existente. Las formas INSERT ... VALUES e INSERT ... SET de la instrucción insertan filas basadas en valores especificados explícitamente. El formulario INSERTAR ... SELECCIONAR inserta filas seleccionadas de otra tabla o tablas.
INSERT INTO table SET
? ¿Es esto posible?
Creo que la extensión está destinada a permitir una sintaxis similar para inserciones y actualizaciones. En Oracle, un truco sintáctico similar es:
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
INSERT ... SET ...
y INSERT ... VALUES ...
. Para la función, tiene un código más corto y más rápido de escribir, una mayor legibilidad y la eliminación de errores tipográficos causados por mezclar el orden de las columnas al escribir su VALUES
cláusula. Mi instinto me dice que en la red lo bueno supera a lo malo, pero su juicio puede ser diferente.
Dado que las sintaxis son equivalentes (de todos modos en MySQL), prefiero la INSERT INTO table SET x=1, y=2
sintaxis, ya que es más fácil de modificar y detectar errores en la declaración, especialmente cuando se insertan muchas columnas. Si tiene que insertar 10 o 15 o más columnas (x, y) VALUES (1,2)
, en mi opinión , es realmente fácil mezclar algo usando la sintaxis.
Si la portabilidad entre diferentes estándares SQL es un problema, entonces tal vez INSERT INTO table (x, y) VALUES (1,2)
sería preferible.
Y si desea insertar varios registros en una sola consulta, no parece que la INSERT INTO ... SET
sintaxis funcione, mientras que la otra sí. Pero en la mayoría de los casos prácticos, de todos modos está recorriendo un conjunto de registros para hacer inserciones, aunque podría haber algunos casos en los que tal vez construya una consulta grande para insertar un grupo de filas en una tabla en una consulta, en lugar de una consulta para cada fila, podría tener una mejora en el rendimiento. Realmente no lo se.
INSERT INTO table SET
no sea estándar. Parece mucho más claro. Supongo que tendré que usar laINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
sintaxis de todos modos para salvarme de los problemas si me transfiero a Postgres.