En SQL, la inserción de registros se realiza utilizando la sentencia INSERT INTO
, que permite agregar datos a una tabla en una base de datos. Existen varias formas de realizar inserciones, dependiendo de los requerimientos y la estructura de los datos. A continuación, explico las principales formas:
Es la forma más simple, donde se especifican las columnas y los valores a insertar.
INSERT INTO empleados (id, nombre, puesto, salario)
VALUES (1, 'Juan Pérez', 'Desarrollador', 50000);
Si se insertan valores en todas las columnas y en el mismo orden en que fueron definidas en la tabla, se pueden omitir los nombres de las columnas:
INSERT INTO empleados
VALUES (1, 'Juan Pérez', 'Desarrollador', 50000);
⚠️ Nota: No es recomendable omitir las columnas, ya que puede causar problemas si la estructura de la tabla cambia en el futuro.
Se pueden insertar varios registros en una sola consulta, lo que mejora el rendimiento al reducir la cantidad de operaciones que se envían a la base de datos.
INSERT INTO empleados (id, nombre, puesto, salario)
VALUES
(2, 'Ana Gómez', 'Gerente', 70000),
(3, 'Carlos Ruiz', 'Analista', 45000),
(4, 'Laura Mendoza', 'Diseñadora', 48000);
Permite insertar registros en una tabla a partir de los datos obtenidos de otra tabla mediante una consulta SELECT
.
INSERT INTO empleados_backup (id, nombre, puesto, salario)
SELECT id, nombre, puesto, salario FROM empleados
WHERE salario > 50000;
Si una columna tiene un valor por defecto (DEFAULT
), se puede insertar un registro sin especificar un valor para esa columna.
INSERT INTO empleados (id, nombre, puesto)
VALUES (5, 'Pedro Ramírez', 'Soporte Técnico');
Si la columna salario
tiene un valor predeterminado en la definición de la tabla, se aplicará automáticamente.
También se puede insertar explícitamente un valor DEFAULT
:
INSERT INTO empleados (id, nombre, puesto, salario)
VALUES (6, 'Sofía Herrera', 'Contadora', DEFAULT);
INSERT IGNORE
)En MySQL, INSERT IGNORE
permite evitar errores cuando se intenta insertar un registro que ya existe (por ejemplo, si la clave primaria ya está en uso).
INSERT IGNORE INTO empleados (id, nombre, puesto, salario)
VALUES (2, 'Ana Gómez', 'Gerente', 70000);
Si el id
ya existe, MySQL simplemente ignorará la inserción en lugar de arrojar un error.
ON DUPLICATE KEY UPDATE
)También en MySQL, si un registro con la misma clave primaria ya existe, se puede actualizar en lugar de insertar un duplicado.
INSERT INTO empleados (id, nombre, puesto, salario)
VALUES (3, 'Carlos Ruiz', 'Analista', 50000)
ON DUPLICATE KEY UPDATE salario = 50000;
MERGE
o UPSERT
en SQL Server y PostgreSQLMERGE
para insertar o actualizar según si el registro ya existe:MERGE INTO empleados AS target
USING (SELECT 3 AS id, 'Carlos Ruiz' AS nombre, 'Analista' AS puesto, 50000 AS salario) AS source
ON target.id = source.id
WHEN MATCHED THEN
UPDATE SET target.salario = source.salario
WHEN NOT MATCHED THEN
INSERT (id, nombre, puesto, salario)
VALUES (source.id, source.nombre, source.puesto, source.salario);
INSERT ... ON CONFLICT
:INSERT INTO empleados (id, nombre, puesto, salario)
VALUES (3, 'Carlos Ruiz', 'Analista', 50000)
ON CONFLICT (id) DO UPDATE SET salario = EXCLUDED.salario;
Cada una de estas técnicas tiene su aplicación según el caso de uso y el motor de base de datos utilizado.