2012-08-09 20 views
7

Estaba mirando a través de las queridas W3schools y encontré esto page y realmente aprendí algo interesante. No sabía que podía llamar a un comando de inserción sin especificar columnas a los valores. Por ejemplo;SQL INSERT sin especificar columnas. ¿Lo que pasa?

INSERT INTO table_name 
VALUES (value1, value2, value3,...) 

Tirando de mi memoria confusa, me parece recordar el prof SQL mencionar que hay que tratar a los campos como si ellos no están en ningún orden en particular (aunque no está en el lado de RDB, pero no está garantizado) .

Mi pregunta es, ¿cómo sabe el servidor qué valores se asignan a qué campos? * Lo probaría yo mismo, pero no voy a usar un servidor de producción para hacer, que es todo lo que tengo acceso en este momento .

Si esta tecnología es específica, estoy trabajando en PostgresSQL. ¿Cómo es útil esta sintaxis en particular?

Respuesta

6

Su prof era correcto: debe nombrar las columnas explícitamente antes de nombrar los valores.

En este caso, los valores se insertarán en el orden en que aparecen en la definición de la tabla.

El problema con esto es que si ese orden cambia, o las columnas se eliminan o se agregan (incluso si son anulables), la inserción se romperá.

En términos de su utilidad, no tanto en el código de producción. Si está escribiendo a mano un inserto rápido, puede que lo ayude a guardarlo escribiendo todos los nombres de las columnas.

3

Se insertan en los campos en el orden en que están en la definición de la tabla.

Entonces, si su tabla tiene campos (a, b, c), a = valor1, b = valor2, c = valor3.

Su profesor tenía razón, esto es flojo y susceptible de romperse. Pero útil para un inserto perezoso rápido y sucio.

0

Los valores se agregan en el mismo orden en que aparecen las columnas en la tabla. Es útil en situaciones en las que no se conocen los nombres de las columnas con las que se trabaja, pero se sabe a qué datos se debe acceder. Generalmente no es una buena idea hacerlo ya que, por supuesto, se rompe si el orden de las columnas cambio o nuevas columnas se insertan en el medio.

0

Esa sintaxis solo funciona sin especificar columnas si y solo si proporciona el mismo número de valores que el número de columnas. La segunda cosa más importante es que las columnas en una tabla sql siempre están en el mismo orden y eso depende de la definición de su tabla. Lo único que no tiene un orden innato en una tabla sql son las filas.

0

cuando se crea la tabla, cada columna tendrá un número de orden en la tabla del sistema. Por lo que cada valor se inserta según el orden ..

valor Firt irá a la primera columna ... un etcétera

En servidor SQL, tabla de sistema syscolumn mantiene este orden. Postgresql debería tener algo similar a esto ...

2

No me puedo resistir a poner aquí un "RTFM".El PostgreSQL
manual detalla lo que sucede: in the chapter on INSERT nombres de columna

El objetivo se pueden enumerar en cualquier orden. Si no se proporciona una lista de nombres de columna , el valor predeterminado son todas las columnas de la tabla en el orden declarado; o los primeros N nombres de columna, si hay son sólo N columnas suministrados por la cláusula de valores o búsqueda. Los valores suministrados por la cláusula VALUES o la consulta están asociados con la lista de columnas explícitas o implícitas de izquierda a derecha.

Bold emphasis mine.