Aprende SQL

Añadiendo registros: INSERT INTO

Lección 01 · Manipulación de datos

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:

Diagrama: tarjeta “Tu INSERT (sin id)” con id: —, title: ‘Elden Ring’, year: 2022, hrs: 150 → secuencia “MAX(id) + 1” sobre pasos 1, 2, ···, 12, 13 → tarjeta “Se almacena” con id: 13 (badge AUTO).

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

id title developer year playtime_hours
1 The Legend of Zelda Nintendo 1986 20
2 Super Mario Bros. Nintendo 1985 10
3 Final Fantasy VII Square Enix 1997 40
12 God of War Santa Monica Studio 2018 25

Ejemplo

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

Tablas de esta lección

videogames5 cols

Estructura

🔑idINTEGERtitleTEXTdeveloperTEXTyearINTEGERplaytime_hoursINTEGER

Datos de ejemplo (5 filas)

idtitledeveloperyearplaytime_hours
1The Legend of ZeldaNintendo198620
2Super Mario Bros.Nintendo198510
3Final Fantasy VIISquare Enix199740
4The Witcher 3CD Projekt Red2015100
5MinecraftMojang Studios20119999
6Grand Theft Auto VRockstar Games201380
7Dark SoulsFromSoftware201160
8Portal 2Valve20118
9Red Dead Redemption 2Rockstar Games201870
10The Last of UsNaughty Dog201315
11Halo: Combat EvolvedBungie200110
12God of WarSanta Monica Studio201825

Ejercicios

Inserta un nuevo videojuego: id 13, título 'Elden Ring', desarrollador 'FromSoftware', año 2022, 150 horas de juego.

sql

Inserta un nuevo videojuego especificando los nombres de las columnas: id 14, título 'Hollow Knight', desarrollador 'Team Cherry', año 2017, 40 horas.

sql

Inserta dos videojuegos a la vez: (15, 'Celeste', 'Matt Makes Games', 2018, 12) y (16, 'Stardew Valley', 'ConcernedApe', 2016, 200).

sql