Donde:
- NombreTabla es el nombre de la tabla donde se van a insertar las filas.
- A continuación del nombre de la tabla, se indica la lista de nombres de columnas de la tabla, separadas con comas y encerradas entre paréntesis. Podemos ver que los nombres de columna son opcionales. Cuando no se especifica una lista de columnas, se consideran, por defecto, todas las columnas de la tabla NombreTabla.
- Valor1, Valor2, … son los valores que se van a asignar a las columnas que se han indicado en la lista de columnas, separados con comas y encerrados entre paréntesis. Estos valores formarán un nuevo registro de la tabla.
Como podemos ver en el formato de arriba, la sentencia INSERT de MySQL acepta la inserción de varios registros a la vez.
Estos valores tienen que cumplir:
- Deben tener el mismo tipo de datos que las columnas de la tabla.
- Los valores de tipo cadena irán encerrados entre comillas.
- Las fechas se escribirán entre comillas y con el formato AAAA-MM-DD.
- Para los números se usará como separador de decimales el punto.
- Cuando queramos que una columna no reciba ningún valor utilizaremos NULL. Si asignamos el valor NULL a una columna definida como NOT NULL, INSERT devuelve error y la inserción no se produce.
- Cuando se especifican los nombre de las columnas:
- Cada uno de los valores corresponde a cada una de las columnas.
- La lista de columnas no tiene porqué contener las columnas en el mismo orden en el que están declaradas en la estructura de la tabla.
- Cualquier columna que no se encuentre en la lista de columnas de esta orden se rellenará con el valor NULL Si esa columna estuviera definida como NOT NULL, recibirá el valor por defecto (por ejemplo una columna de tipo numérico recibirá por defecto un 0, si es texto un espacio en blanco y si es fecha 0000-00-00). También podemos asignarle el valor por defecto escribiendo DEFAULT.
- Cuando no se incluye lista de columnas:
- Si no se incluye en INSERT la lista de columnas, se deben introducir valores en todas las columnas y en el mismo orden que aparecen en la estructura de la tabla. Si no recordamos el orden de las columnas podemos usar DESCRIBE NombreTabla.
- Cuando una columna es de tipo autoincrementado, AUTO_INCREMENT, si no se escribe en la lista de columnas, recibe el valor siguiente al último valor almacenado en la tabla. Si se declara en las columnas del INSERT, habrá que asignar un valor, que puede ser NULL, 0 ó ''.
Con relación a claves e índices:
- Si la tabla tiene una clave principal e intentamos insertar una fila con un valor en esa columna que ya exista, se genera un mensaje de error y la inserción no se produce.
- Cuando la tabla contiene una clave ajena relacionada con la clave de otra tabla y con integridad referencial, si el valor que se da a la clave ajena no existe en la tabla relacionada se genera error y no se produce la inserción.
- Si queremos insertar una fila que tenga un índice que no admita duplicados, un valor repetido en esa columna, se produce un error y no se puede insertar.
Veremos a continuación algunos ejemplos de cómo utilizar la sentencia INSERT con la sintaxis que hemos visto:
Ejemplo 1.
Inserta una fila en la tabla EQUIPOS rellenando todas las columnas.
INSERT INTO equipo (cdequipo, nombre, comunidad, anio_funda)
VALUES ('08', 'Los senior','Andalucía',2023);
Esta orden es equivalente a esta otra, puesto que se rellenan todas las columnas y en el mismo orden en el que están definidas en la tabla equipo:
INSERT INTO equipo VALUES ('08', 'Los senior','Andalucía',2023);
Ejemplo 2.
Añade una fila en la tabla EQUIPO, para dar de alta al equipo de código '19' y de nombre 'Marismas'. Las columnas comunidad y anio_funda tomarán el valor: NULL. (Si no están definidos como obligatorias con la restricción NOT NULL).
INSERT INTO equipo (cdequipo, nombre) VALUES ('09', 'Marismas');
INSERT extendido.
¿Podemos insertar varias filas con una única sentencia INSERT? Si se puede hacer, y es lo que se conoce como <em>INSERT</em> extendido.
Un INSERT extendido, consiste en una sola sentencia INSERT que permite insertar varias filas a la tabla de manera más eficiente, en una sola operación. El requisito que deben cumplir las filas o valores a insertar es que se especifique en todas ellas las mismas columnas y en el mismo orden.
Ejemplo 3.
Por ejemplo, podemos insertar dos filas en la tabla participa, ambas correspondientes a participaciones en juegos del mismo concursante. La columna a la que no se le a valor, puntos tomará el valor NULL, si admite nulos, o el valor que tenga por defecto si tiene restricción DEFAULT.
INSERT INTO participa (cdconcur, cdjuego, fecha_inicio) VALUES
('A14', 'CON',curdate()), ('A14', 'MUO',curdate());
INSERT con clave primaria AUTO_INCREMENT.
Si disponemos de una tabla de nombre catalogo_juegos definida con una clave primaria AUTO_INCREMENT de la siguiente forma:
CREATE TABLE catalogo_juegos(
id INT AUTO_INCREMENT PRIMARY KEY,
codigo CHAR(3) NOT NULL UNIQUE,
nombre VARCHAR(40) NOT NULL UNIQUE,
dificultad ENUM ('alta', 'media', 'baja') NOT NULL,
estrellas TINYINT DEFAULT 0
);
¿Cómo insertamos filas en esta tabla?
Para insertar juegos en esa tabla, con una clave primaria AUTO_INCREMENT podemos proceder de dos formas:
- No indicar la columna id en la lista de columnas a la que se le da valor, ya que su valor lo genera el sistema de forma automática. Generará el valor del último id más 1.
- Si indicamos que se va a dar valor a la columna id, el valor debe ser un valor que pueda ignorar el sistema y así poder seguir con la secuencia de autoincremento que le corresponda. Para ello se pondrá el valor 0 o
NULL en la posición de la columna de tipo AUTO_INCREMENT id.
Lo vemos en el siguiente ejemplo.
Ejemplo 4.
Insertamos un juego en la tabla catalogo_juegos siguiendo el primer formato.
INSERT INTO catalogo_juegos (codigo, nombre, dificultad, estrellas) VALUES
('JU1','JUEGO1','alta',1);
Insertamos un juego en la tabla catalogo_juegos siguiendo el segundo formato.
INSERT INTO catalogo_juegos VALUES (NULL, 'JU2','JUEGO2','media',2);
INSERT con SET
Existe una sintaxis alternativa para INSERT: