Contenido de esta guía
Qué hace INSERT INTO
INSERT INTO crea filas nuevas. La lista de columnas define el destino de cada valor y permite omitir columnas que recibirán un valor predeterminado o NULL cuando la definición lo permita.
Una inserción no se considera correcta solo porque la sintaxis sea válida: también debe respetar tipos, claves, restricciones únicas, valores obligatorios y relaciones con otras tablas.
Sintaxis segura
INSERT INTO tabla (columna_1, columna_2)
VALUES (valor_1, valor_2);INSERT INTO tabla (columna_1, columna_2)
VALUES (valor_a1, valor_a2),
(valor_b1, valor_b2);Escribe la lista de columnas. Evita depender del orden físico de la tabla. Si el esquema cambia o existe una columna con valor predeterminado, la intención de la consulta seguirá siendo visible.
Ejemplo guiado: insertar dos clientes y deshacer
La operación se ejecuta en una transacción de práctica. Una fila incluye email y otra deja ese valor como NULL.
BEGIN;
INSERT INTO clientes
(id, nombre, email, ciudad, fecha_registro, activo)
VALUES
(90, 'Nora Paz', 'nora@example.test', 'Málaga', '2026-08-05', 1),
(91, 'Óscar Luna', NULL, 'Toledo', '2026-08-05', 1);
SELECT id, nombre, email, ciudad, activo
FROM clientes
WHERE id IN (90, 91)
ORDER BY id;
ROLLBACK;| id | nombre | ciudad | activo | |
|---|---|---|---|---|
| 90 | Nora Paz | nora@example.test | Málaga | 1 |
| 91 | Óscar Luna | NULL | Toledo | 1 |
ROLLBACK devuelve la copia de práctica a su estado inicial. En una aplicación real, deja que el motor genere la identidad cuando la columna esté configurada para ello, en lugar de inventar identificadores manualmente.
Columnas omitidas y valores predeterminados
Las columnas que no aparecen en la lista reciben su valor DEFAULT o NULL si la tabla lo permite. Si una columna es obligatoria y no tiene valor predeterminado, la sentencia falla. Ese error protege la coherencia de los datos.
Error frecuente
Desalinear columnas y valores
INSERT INTO productos (nombre, precio, stock)
VALUES ('Webcam', 6, 59.90);La sentencia puede ser válida pero guardar 6 como precio y 59.90 como stock. Lee columnas y valores en paralelo y usa restricciones que rechacen combinaciones imposibles.
Comprueba lo aprendido
Añade un producto de prueba
Dentro de una copia o transacción, inserta el producto 90: Adaptador HDMI, categoría Accesorios, categoria_id = 1, precio 19,90 y stock 8. Escribe todas las columnas.
productos.Solución razonada
INSERT INTO productos
(id, nombre, categoria, categoria_id, precio, stock)
VALUES
(90, 'Adaptador HDMI', 'Accesorios', 1, 19.90, 8);
SELECT id, nombre, categoria, precio, stock
FROM productos
WHERE id = 90;| id | nombre | categoria | precio | stock |
|---|---|---|---|---|
| 90 | Adaptador HDMI | Accesorios | 19,9 | 8 |
La fila respeta la clave de categoría existente y cada valor queda asociado a la columna indicada.
Compatibilidad entre motores
La inserción con lista de columnas y VALUES es ampliamente portable. La forma de generar identificadores, devolver filas insertadas y resolver conflictos cambia entre motores. PostgreSQL y SQLite documentan RETURNING; otras plataformas ofrecen variantes o mecanismos distintos.
Qué debes recordar
- Lista explícitamente las columnas.
- Una sola sentencia puede insertar varias filas.
- Las restricciones pueden rechazar datos incoherentes.
- Practica cambios dentro de una transacción reversible.