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.
| id | title | year |
|---|---|---|
| 1 | Zelda | 1986 |
| 2 | Mario | 1985 |
| 3 | FF VII | 1997 |
| id | title | year |
|---|---|---|
| 1 | Zelda | 1986 |
| 2 | Mario | 1985 |
| 3 | FF VII | 1997 |
| 4 | Elden Ring | 2022 |
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
Estructura
Datos de ejemplo (5 filas)
| 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 |
| 4 | The Witcher 3 | CD Projekt Red | 2015 | 100 |
| 5 | Minecraft | Mojang Studios | 2011 | 9999 |
| 6 | Grand Theft Auto V | Rockstar Games | 2013 | 80 |
| 7 | Dark Souls | FromSoftware | 2011 | 60 |
| 8 | Portal 2 | Valve | 2011 | 8 |
| 9 | Red Dead Redemption 2 | Rockstar Games | 2018 | 70 |
| 10 | The Last of Us | Naughty Dog | 2013 | 15 |
| 11 | Halo: Combat Evolved | Bungie | 2001 | 10 |
| 12 | God of War | Santa Monica Studio | 2018 | 25 |
Ejercicios
Inserta un nuevo videojuego: id 13, título 'Elden Ring', desarrollador 'FromSoftware', año 2022, 150 horas de juego.
Inserta un nuevo videojuego especificando los nombres de las columnas: id 14, título 'Hollow Knight', desarrollador 'Team Cherry', año 2017, 40 horas.
Inserta dos videojuegos a la vez: (15, 'Celeste', 'Matt Makes Games', 2018, 12) y (16, 'Stardew Valley', 'ConcernedApe', 2016, 200).