2009-05-14 27 views
195

¿Cuál es la principal diferencia entre INSERT INTO table VALUES .. y INSERT INTO table SET?MySQL INSERT INTO table VALUES ... vs INSERT INTO table SET

Ejemplo:

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

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

Y qué pasa con el rendimiento de estos dos?

+9

Después de leer Code Complete y el constante énfasis de McConnell en la legibilidad, parece desafortunado que 'INSERT INTO table SET' no sea estándar. Parece mucho más claro. Creo que tendré que usar la sintaxis 'INSERT INTO table ([nombre de columna, nombre de columna b]) VALUES (['value a', 'value b'])' de todos modos para evitar problemas si cambio de puerto a Postgres. – cluelesscoder

+0

¡Esta pregunta se ha vuelto viral como el video de Kanye! – aMazing

Respuesta

156

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, deben ser exactamente equivalentes en cuanto al rendimiento.

http://dev.mysql.com/doc/refman/5.6/en/insert.html dice:

INSERT inserta nuevas filas en una tabla existente. Los INSERTAR ... VALORES e INSERTAR ... los formularios SET de la instrucción insertan filas basadas en valores explícitamente especificados. El formulario INSERTAR ... SELECCIONAR inserta filas seleccionadas de otra tabla o tablas.

+3

¿Cómo INSERTAR múltiples valores usando 'INSERT INTO table SET'? ¿Esto es posible? – pixelfreak

+2

¿Qué quieres decir? El ejemplo del OP dice SET a = 1, b = 2, c = 3, que son valores múltiples a mi entender. –

+6

Quiero decir, INSERTAR múltiples filas. Me gusta: INSERTAR EN LA tabla (a, b, c) VALORES (1,2,3), (4,5,6), (7,8,9); – pixelfreak

13

Creo que la extensión está pensada para permitir una sintaxis similar para inserciones y actualizaciones. En Oracle, un truco sintáctica similar:

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

Creo que la extensión crea más problemas de los que resuelve. – Pacerier

+4

@Pacerier ¿Cómo? El único problema que veo es el de portabilidad (que, en muchos contextos, realmente no importa); ¿Me estoy perdiendo de algo? –

+1

@MarkAmery, sí, cuando lo miras, no hay un beneficio real. La desventaja es ** tiempo innecesario perdido **, toda la existencia de este hilo prueba mi punto. – Pacerier

0

Desde las sintaxis son equivalentes (en MySQL de todos modos), prefiero la sintaxis INSERT INTO table SET x=1, y=2, ya que es más fácil de modificar y más fáciles de detectar errores en la declaración, sobre todo cuando insertando muchas columnas Si tiene que insertar 10 o 15 o más columnas, es realmente fácil mezclar algo usando la sintaxis (x, y) VALUES (1,2), en mi opinión.

Si la portabilidad entre diferentes estándares SQL es un problema, entonces quizás se prefiera INSERT INTO table (x, y) VALUES (1,2).

Y si quiere insertar múltiples registros en una sola consulta, no parece que la sintaxis INSERT INTO ... SET funcionará, mientras que la otra lo hará. Pero, en la mayoría de los casos prácticos, está recorriendo un conjunto de registros para hacer inserciones de todos modos, aunque podría haber algunos casos en los que tal vez construir una consulta grande para insertar un grupo de filas en una tabla en una consulta, frente a una consulta de cada fila, puede tener una mejora en el rendimiento. Realmente no lo se.

Cuestiones relacionadas