Insertar (SQL)

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 7 de octubre de 2016; las comprobaciones requieren 9 ediciones .

INSERT  es una instrucción SQL que le permite agregar filas a una tabla al llenarlas con valores. Los valores pueden ser insertados por enumeración usando la palabra valores y enumerados entre paréntesis, separados por comas, o usando la instrucción select .

Ejemplos de uso

Usando una enumeración de valores, especificando columnas:

insertar en < nombre de tabla > ([ < nombre de columna > , ... ]) valores ( < valor > ,...)

Por ejemplo:

INSERTAR EN phone_book ( nombre , número ) VALORES ( 'John Doe' , '555-1212' );

Usando una enumeración de valores, sin especificar columnas:

insertar en < nombre de la tabla > valores ( < valor > ,...)

Por ejemplo:

INSERTAR EN LOS VALORES de la guía telefónica ( 'John Doe' , '555-1212' );

Usando seleccionar:

insertar en < nombre de la tabla > seleccionar < nombre de la columna > ,... de < nombre de la tabla >

En este último caso, se puede insertar más de un registro en la tabla. Si hay otros campos en la tabla que deben completarse pero no se especifican en la declaración de inserción, se establecerán en el valor predeterminado o serán nulos si no se especifica ningún valor predeterminado.

Sintaxis alternativa para la sentencia INSERT

Algunos DBMS, como MySQL, tienen una sintaxis alternativa para la instrucción INSERT, en la que los valores se asignan a las columnas mediante la palabra clave SET:

insertar en < nombre de tabla > establecer < nombre de columna 1 > = < valor 1 > , < nombre de columna 2 > = < valor 2 > ...

Características

Durante la ejecución de la declaración, pueden ocurrir errores:

  • si el campo se creó con el parámetro no nulo y no se especificó ningún valor predeterminado (consulte crear ), se producirá un error si no hay un valor insertable para él. La solución es obvia:
    • o eliminar el parámetro no nulo
    • o especifique un valor predeterminado
    • o insertar valor
  • si se intenta insertar en un campo con identidad de tipo (incremento automático), también se producirá un error. Hay dos formas de resolver el problema:
    • no inserte un valor en este campo
    • especifique la opción Identity_insert on y luego inserte un valor único para esta columna

opción de inserción de identidad (MS SQL Server)

esta declaración no funcionará, debe especificar el nombre de la tabla.

Habilitar opción:

SET IDENTITY_INSERT table { ACTIVADO | APAGADO }

Después de habilitar esta opción, puede insertar valores en campos definidos como identidad. Tenga en cuenta que el valor debe ser único.

No se recomienda habilitar esta opción sin una necesidad clara. Sin embargo, debe usarse en registros donde algunas columnas deben cambiarse sin cambiar su columna de identidad (por ejemplo, si esta columna está vinculada a otra tabla)

Obteniendo la Clave

Los desarrolladores que usan una clave sustituta como clave principal a menudo se encuentran con un escenario en el que necesitan obtener la clave principal (para usarla en otras consultas) generada por la base de datos en respuesta a una instrucción SQL INSERT. Pero la mayoría de los sistemas no permiten que la instrucción SQL INSERT devuelva datos. Soluciones posibles:

  • Utilice un procedimiento almacenado específico de la base de datos que genere una clave sustituta, realice una operación INSERT y devuelva la clave generada. Por ejemplo, en Microsoft SQL Server, la función especial SCOPE_IDENTITY() devuelve la clave y, en SQLite , la función last_insert_rowid().
  • Use una operación SELECT específica de la base de datos en una tabla temporal que contenga la última fila agregada (o filas). DB2 implementa esta característica de la siguiente manera:
SELECCIONE * DE LA TABLA FINAL ( INSERTAR EN LOS VALORES de la guía telefónica ( 'Peter Doe' , '555-2323' ) ) COMO t DB2 para z/OS implementa esta capacidad de la siguiente manera: SELECCIONE EMPNO , HIRETYPE , HIREDATE DE LA TABLA FINAL ( INSERTAR EN EMPSAMP ( NOMBRE , SALARIO , DEPTNO , NIVEL ) VALORES ( ' Mary Smith ' , 35000 . 00 , 11 , ' Associate ' ));
  • Usando una declaración SELECT después de una declaración INSERT, con una función especial que, en una base de datos dada, devuelve la clave principal generada para la última fila agregada.
  • Mediante el uso de la combinación única de campos que formaban parte de la sentencia SQL INSERT original en llamadas posteriores a la sentencia SELECT .
  • Usando el GUID en una instrucción SQL INSERT, obtenga el resultado a través de una instrucción SELECT .
  • Usando la función PHP MySQL mysql_insert_id() después de la instrucción INSERT.
  • usando INSERT seguido de SELECT LAST_INSERT_ID() para MySQL .
  • Uso de la declaración INSERT con una cláusula OUTPUT (Transact-SQL) desde Microsoft SQL Server 2005 .
DECLARE @ table TABLE ( [ id ] [ smallint ] IDENTIDAD ( 1 , 1 ) NOT NULL , [ name ] [ nchar ]( 50 ) NULL ); INSERTAR EN @ tabla SALIDA INSERTADA . id VALORES ( 'Peter Doe' );
  • Usando la declaración INSERT con el modificador RETURNING para PostgreSQL (desde la versión 8.2) y Firebird (desde la versión 2.0 ). La lista devuelta es idéntica al resultado de la instrucción SELECT.
INSERTAR EN LOS VALORES de la guía telefónica ( 'Peter Doe' , '555-2323' ) DEVOLVER phone_book_id
  • Usando la instrucción INSERT con el modificador RETURNING para Oracle . La misma sintaxis se usa en Firebird para procedimientos, disparadores y bloques de ejecución.
INSERTAR EN VALORES phone_book ( 'Peter Doe' , '555-2323' ) REGRESAR phone_book_id EN v_pb_id
  • La función IDENTITY() en H2 devuelve la última clave agregada (¿clave?)
SELECCIONE IDENTIDAD ();

Véase también