Aprende SQL

Añadiendo registros: INSERT INTO

Hasta ahora hemos consultado datos existentes. Con INSERT INTO puedes añadir nuevos registros a una tabla.

Antes
idtitleyear
1Zelda1986
2Mario1985
3FF VII1997
INSERT →
Después
idtitleyear
1Zelda1986
2Mario1985
3FF VII1997
4Elden Ring2022

Sintaxis básica

INSERT INTO tabla (columna1, columna2, ...)
VALUES (valor1, valor2, ...);

Si insertas valores para todas las columnas en orden, puedes omitir los nombres:

INSERT INTO tabla
VALUES (valor1, valor2, valor3, ...);

Insertar múltiples filas

Puedes insertar varias filas en una sola sentencia separándolas por comas:

INSERT INTO tabla VALUES
(valor1a, valor2a, ...),
(valor1b, valor2b, ...);

AUTOINCREMENT en la clave primaria

Cuando defines una columna como INTEGER PRIMARY KEY, SQLite le asigna automáticamente un valor incremental si no lo especificas al insertar. Esto es muy práctico para columnas de tipo id:

Tu INSERT (sin id)
id
title 'Elden Ring'
year 2022
hrs 150
1 2 ··· 12 13
MAX(id) + 1
Se almacena
id 13 AUTO
title 'Elden Ring'
year 2022
hrs 150
INSERT INTO videogames (title, developer, year, playtime_hours)
VALUES ('Elden Ring', 'FromSoftware', 2022, 150);

Al omitir el id, SQLite asigna automáticamente el siguiente valor disponible (en este caso, 13). Esto evita conflictos con ids duplicados y simplifica las inserciones.

INSERT OR IGNORE / INSERT OR REPLACE

Cuando intentas insertar un registro que viola una restricción UNIQUE o PRIMARY KEY, SQL da un error. SQLite ofrece dos formas de manejar estos conflictos:

INSERT OR IGNORE simplemente ignora la fila que causa el conflicto, sin generar error:

INSERT OR IGNORE INTO videogames (id, title, developer, year, playtime_hours)
VALUES (1, 'Otro juego', 'Otro dev', 2020, 50);
-- No hace nada porque ya existe id = 1

INSERT OR REPLACE reemplaza la fila existente con los nuevos datos:

INSERT OR REPLACE INTO videogames (id, title, developer, year, playtime_hours)
VALUES (1, 'Zelda Remaster', 'Nintendo', 2024, 30);
-- Sustituye el registro con id = 1

Estos mecanismos son muy útiles en scripts de carga de datos donde no quieres que un duplicado detenga toda la operación.

Nuestra tabla

Partimos de la tabla videogames con 12 registros:

Nombre de la Tabla: videogames
idtitledeveloperyearplaytime_hours
1The Legend of ZeldaNintendo198620
2Super Mario Bros.Nintendo198510
3Final Fantasy VIISquare Enix199740
12God of WarSanta Monica Studio201825

Ejemplo

INSERT INTO videogames (id, title, developer, year, playtime_hours)
VALUES (13, 'Elden Ring', 'FromSoftware', 2022, 150);

Ejercicios