El comando INSERT INTO en SQL se utiliza para agregar nuevas filas a una tabla.
Es uno de los comandos fundamentales del lenguaje SQL, ya que permite alimentar una base de datos con información.
Con INSERT INTO
podemos:
- Insertar valores en todas las columnas de la tabla.
- Insertar valores solo en columnas específicas.
- Insertar varias filas en una sola instrucción.
- Insertar datos a partir de otra consulta (
INSERT ... SELECT
).
Sintaxis básica de INSERT INTO
Existen dos formas principales:
1) Insertar en todas las columnas
INSERT INTO nombre_tabla
VALUES (valor1, valor2, valor3, ...);
👉 El orden de los valores debe coincidir exactamente con el orden de las columnas de la tabla.
2) Insertar en columnas específicas
INSERT INTO nombre_tabla (columna1, columna2, columna3)
VALUES (valor1, valor2, valor3);
👉 Esta es la forma más recomendada, porque hace explícitas las columnas que reciben valores.
Ejemplos básicos de INSERT INTO
1) Insertar un cliente
INSERT INTO clientes (id, nombre, ciudad)
VALUES (1, 'Ana', 'Madrid');
2) Insertar valores en todas las columnas
Si la tabla productos
tiene 3 columnas (id
, nombre
, precio
):
INSERT INTO productos
VALUES (101, 'Teclado', 25.5);
3) Insertar múltiples filas
En muchos motores (MySQL, PostgreSQL, SQL Server) se pueden insertar varias filas a la vez:
INSERT INTO empleados (id, nombre, salario)
VALUES
(1, 'Luis', 2000),
(2, 'Carla', 2500),
(3, 'Mario', 2200);
👉 Es más eficiente que ejecutar múltiples INSERT
.
4) Insertar con valores por defecto
Si una columna tiene un DEFAULT
, podemos omitirla:
CREATE TABLE cuentas (
id INT PRIMARY KEY,
activa BOOLEAN DEFAULT TRUE
);
INSERT INTO cuentas (id) VALUES (1);
👉 El valor de activa
será TRUE
automáticamente.
5) Insertar a partir de otra consulta
INSERT INTO clientes_archivados (id, nombre, ciudad)
SELECT id, nombre, ciudad
FROM clientes
WHERE ciudad = 'Sevilla';
👉 Copia clientes de una tabla a otra usando SELECT y WHERE.
INSERT INTO y tipos de datos
Es importante que los valores insertados coincidan con el tipo de dato de cada columna:
- Cadenas →
'texto'
con comillas simples. - Números → sin comillas.
- Fechas → formato
'YYYY-MM-DD'
. - Valores nulos →
NULL
.
Ejemplo:
INSERT INTO pedidos (id, cliente_id, fecha, total)
VALUES (10, 2, '2025-03-01', NULL);
👉 total
queda nulo hasta calcularlo.
INSERT INTO y AUTO_INCREMENT
En muchas bases de datos, una columna id
se define como autoincremental:
CREATE TABLE clientes (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100)
);
En este caso, no es necesario (ni correcto) especificar el id
:
INSERT INTO clientes (nombre) VALUES ('Sofía');
👉 El motor asigna automáticamente el valor del id
.
INSERT INTO con funciones
Podemos insertar valores generados con funciones:
INSERT INTO registros (fecha, descripcion)
VALUES (NOW(), 'Usuario logueado');
👉 NOW()
inserta la fecha y hora actual.
Errores comunes con INSERT INTO
- Número incorrecto de columnas y valores
-- ❌ Error: 3 columnas, 2 valores
INSERT INTO empleados (id, nombre, salario)
VALUES (1, 'Laura');
- Tipos de datos incompatibles
-- ❌ Error: salario es numérico
INSERT INTO empleados (id, nombre, salario)
VALUES (2, 'Pablo', 'mil euros');
- Violación de restricción UNIQUE
-- ❌ Error: email duplicado si ya existe
INSERT INTO usuarios (id, email) VALUES (1, 'ana@email.com');
- Omisión de NOT NULL
Si una columna está definida comoNOT NULL
y no tieneDEFAULT
, debe recibir un valor.
Buenas prácticas con INSERT INTO
- Especificar siempre las columnas: hace el código más legible y evita errores si la tabla cambia.
- Insertar varias filas en un solo comando: mejora la eficiencia en cargas masivas.
- Validar datos antes de insertarlos: usar restricciones (
CHECK
,NOT NULL
,UNIQUE
). - Usar transacciones en inserciones masivas para mantener consistencia.
- Evitar hardcodear IDs autoincrementales: dejar que la base los genere.
INSERT INTO y rendimiento
En sistemas con millones de filas:
- Es mejor insertar en bloques (
batch insert
) que fila por fila. - Usar herramientas de carga masiva (
COPY
en PostgreSQL,LOAD DATA INFILE
en MySQL). - Mantener índices adecuados: demasiados índices ralentizan las inserciones.
Ejemplo avanzado: cargar ventas diarias
INSERT INTO ventas_resumen (fecha, total_dia)
SELECT fecha, SUM(total)
FROM ventas
GROUP BY fecha;
👉 Genera una tabla resumen con las ventas diarias.
Preguntas frecuentes (FAQ)
1. ¿INSERT INTO y INSERT son lo mismo?
Sí. La mayoría de los motores aceptan ambas formas. INSERT INTO
es la forma más explícita.
2. ¿Puedo insertar múltiples filas con un solo comando?
Sí, separándolas con comas. Ejemplo:
INSERT INTO tabla (col1, col2) VALUES (1,'A'), (2,'B');
3. ¿Qué diferencia hay entre INSERT y UPDATE?
INSERT
agrega nuevas filas.UPDATE
modifica filas existentes.
4. ¿Qué pasa si intento insertar una fila duplicada en una columna UNIQUE?
La base de datos lanza un error. En algunos motores se puede usar INSERT IGNORE
o ON CONFLICT DO NOTHING
.
5. ¿Cómo inserto valores por defecto?
Podés omitir la columna o usar la palabra clave DEFAULT
.
Conclusión
El comando INSERT INTO es la herramienta fundamental para cargar datos en una base de datos SQL.
Con él podemos insertar filas simples, múltiples registros, valores por defecto y resultados de otras consultas.
Dominar INSERT INTO
es esencial para cualquier programador, analista de datos o administrador de bases de datos.
Practica inserciones con ejemplos en INSERT, UPDATE y DELETE y vuelve al Glosario SQL completo.