Esta sintaxis se utiliza para insertar una sola fila
cuyos valores indicamos después de la palabra reservada VALUES.
En castellano la sentencia se leería: INSERTA
EN destino...VALORES ....
Los registros se agregan siempre al
final de la tabla.
Destino es el nombre de la tabla donde
vamos a insertar la fila también se puede utilizar un
nombre de consulta, consulta que tenga
como origen de datos una única tabla.
Al nombre de la tabla se le puede añadir la cláusula IN
si la tabla se encuentra en otra base de datos (en una base de datos externa).
La palabra reservada VALUES se puede
sustituir por la palabra SELECT (
en otros SQLs se emplea únicamente VALUES).
A continuación de la palabra VALUES,
entre paréntesis se escriben los valores
que queremos añadir. Estos valores se tienen que escribir
de acuerdo al tipo de dato de la columna
donde se van a insertar (encerrados entre comillas simples ' ' para valores
de tipo texto, entre # # para valores de fecha...) la
asignación de valores se realiza por posición,
el primer valor lo asigna a la primera columna, el segundo valor a la
segunda columna, así sucesivamente...
Cuando la tabla tiene una columna de tipo contador
(AutoNumber), lo normal es no asignar valor a
esa columna para que el sistema le asigne el valor que le toque según
el contador, si por el contrario queremos que la columna tenga un valor
concreto, lo indicamos en la lista de valores.
Cuando no se indica ninguna lista de columnas
después del destino, se asume por defecto todas
las columnas de la tabla, en este caso, los valores se tienen
que especificar en el mismo orden
en que aparecen las columnas en la ventana de
diseño de dicha tabla, y se tiene que utilizar el valor
NULL para rellenar las columnas de
las cuales no tenemos valores.
Ejemplo:
INSERT INTO empleados VALUES (200, 'Juan López',
30, NULL, 'rep ventas', #06/23/01#, NULL, 350000, 0)
Observar en el ejemplo que los valores de tipo texto
se encierran entre comillas simples ' ' (también se pueden emplear
las comillas dobles " ") y que la fecha de contrato se encierra
entre almohadillas # # con el formato mes/dia/año. Como no tenemos
valor para los campos oficina y director (a este nuevo empleado todavía
no se le ha asignado director ni oficina) utilizamos la palabra reservada
NULL. Los valores numéricos
se escriben tal cual, para separar la parte entera de la parte decimal
hay que utilizar siempre el punto independientemente de la configuración
que tengamos.
Cuando indicamos nombres de columnas, estos corresponden a
nombres de columna de la tabla, pero
no tienen por qué estar en el orden en
que aparecen en la ventana diseño de la tabla, también
se pueden omitir algunas columnas, la
columnas que no se nombran tendrán por
defecto el valor NULL o el valor predeterminado indicado en
la ventana de diseño de tabla.
El ejemplo anterior se podría escribir de la siguiente
forma:
INSERT INTO empleados (numemp,oficina, nombre,
titulo,cuota, contrato, ventas)
VALUES (200, 30, 'Juan López', 'rep ventas',350000, #06/23/01#,0)
Observar que ahora hemos variado el orden de los valores
y los nombres de columna no siguen el mismo orden que en la tabla origen,
no importa, lo importante es poner los valores en el mismo orden que las
columnas que enunciamos. Como no enunciamos las columnas oficina y director
se rellenarán con el valor nulo (porque es el valor que tienen
esas columnas como valor predeterminado).
El utilizar la opción de poner una lista
de columnas podría parecer peor ya que se tiene que
escribir más pero realmente tiene ventajas
sobre todo cuando la sentencia la vamos a almacenar
y reutilizar:
la sentencia queda
más fácil de interpretar
leyéndola vemos qué valor asignamos a qué columna,
de paso nos aseguramos
que el valor lo asignamos a la columna que queremos,
si
por lo que sea cambia el orden de las columnas
en la tabla en el diseño, no pasaría nada mientras
que de la otra forma intentaría asignar los valores a otra columna,
esto produciría errores de 'tipo no corresponde' y lo que
es peor podría asignar valores erróneos sin que nos demos
cuenta,
otra ventaja es
que si se añade una nueva columna a la
tabla en el diseño, la primera sentencia INSERT daría
error ya que el número de valores no corresponde con el número
de columnas de la tabla, mientras que la segunda INSERT
no daría error y en la nueva columna se insertaría el valor
predeterminado.
Errores que se pueden producir cuando se ejecuta la sentencia
INSERT INTO:
Si
la tabla de destino tiene clave principal y en ese campo intentamos
no asignar valor, asignar el valor nulo o un valor que ya existe en la
tabla, el motor de base de datos Microsoft Jet no añade la fila
y da un mensaje de error de 'infracciones de clave'.
Si
tenemos definido un índice
único (sin duplicados) e intentamos asignar un valor
que ya existe en la tabla también devuelve el mismo error.
Si
la tabla está relacionada con otra, se seguirán
las reglas de integridad referencial.
Aquí puedes repasar las reglas de integridad referencial.
|