Pregunta 1Cuando ejecutas INSERT INTO book (title, price) VALUES ('Intro a SQL', 1980);, ¿qué le pasa a la columna id (INTEGER PRIMARY KEY) que no estaba en la lista de columnas?
INSERT — añadir datos a una tabla
Aprende la sentencia SQL INSERT desde lo básico. Cubre la forma con columnas con nombre, el atajo con columnas omitidas y las inserciones masivas multifila — tres patrones ilustrados con tablas separadas y ejecutados en vivo en tu navegador.
INSERT — añadir filas a una tabla
Para añadir una nueva fila a una tabla, usas la sentencia INSERT. SELECT trataba de "leer datos"; INSERT es la operación más básica para "insertar datos". Registro de usuarios, registro de compras, escritura de logs — la mayor parte del "guardar algo" de una aplicación ocurre a través de INSERT.
Nombrar columnas y valores (forma básica)
La forma más común nombra tanto las columnas como los valores: INSERT INTO table_name (col, col, ...) VALUES (val, val, ...);. Después del nombre de la tabla, lista las columnas entre paréntesis, y después de VALUES, lista los valores en el mismo orden y la misma cantidad.
En esta forma, cualquier columna que no esté en la lista toma NULL por defecto (o el DEFAULT de la columna). Si omites una columna INTEGER PRIMARY KEY, se activa la autonumeración y se asigna un entero sin usar.
INSERT INTO es "en qué tabla insertar", la lista de columnas entre paréntesis es "qué columnas reciben valores", y dentro de VALUES (...) están "los valores, en el mismo orden que la lista de columnas". Familiarízate con la posición y el papel de cada uno.-- Añade 1 fila a book (solo title y price)
INSERT INTO book (title, price) VALUES ('Intro a SQL', 1980);
-- Comprueba el resultado
SELECT * FROM book;
¿Y las columnas omitidas?
Las columnas que no están en la lista toman el DEFAULT de la columna (o NULL si no hay uno). Para una columna INTEGER PRIMARY KEY, se activa la autonumeración y se asigna un entero sin usar (el equivalente al AUTO_INCREMENT de MySQL).
Omitir la lista de columnas para rellenar todas las columnas
Otra forma es el atajo sin lista de columnas, listando los valores para todas las columnas en orden: INSERT INTO table_name VALUES (val, val, ...);. La palabra clave VALUES viene inmediatamente después del nombre de la tabla.
La contrapartida de ser más corto: tienes que recordar el orden de columnas de la tabla. Y una vez que ALTER TABLE añada una columna después, esta forma se rompe porque el número de valores ya no coincide — así que úsala solo en situaciones limitadas como cargar datos temporales o scripts desechables.
-- Añade 1 fila a task (omitiendo la lista de columnas)
INSERT INTO task VALUES ('Limpiar', 0);
-- Comprueba el resultado
SELECT * FROM task;
La forma con columnas omitidas se rompe ante ALTER TABLE
INSERT INTO task VALUES ('Limpiar', 0); funciona hoy porque la tabla tiene 2 columnas. Si más tarde ejecutas ALTER TABLE task ADD COLUMN due_on TEXT;, cada columna necesita un valor (3 en total), y este INSERT se rompe con un error de número de valores que no coincide.
Para aplicaciones en producción y scripts, prefiere la forma con columnas con nombre (forma básica) — cuando la definición de la tabla evoluciona, no tienes que reescribir tus INSERT. Reserva la forma de atajo para casos limitados como "datos temporales con un esquema fijo" o "scripts desechables".
Añadir varias filas a la vez
Una sola sentencia INSERT también puede añadir varias filas a la vez. Solo lista varias tuplas `(val, val, ...)` separadas por comas después de VALUES — cada conjunto de paréntesis es una fila.
Hay dos razones para hacerlo. Una es menos código, y la otra es que solo se necesita una ida y vuelta a la base de datos, lo que es más rápido que ejecutar un INSERT por fila. La carga masiva desde archivos CSV o logs es el caso de uso estándar para esta forma.
-- Añade 3 filas a product de una vez
INSERT INTO product (name, price) VALUES
('Manzana', 150),
('Plátano', 100),
('Naranja', 200);
-- Comprueba el resultado
SELECT * FROM product;
Donde la forma con columnas omitidas se rompe — cuando ALTER TABLE añade una columna
El callout anterior dijo "la forma con columnas omitidas se rompe ante ALTER TABLE". Verla romperse una vez te da una referencia concreta a la que volver al decidir si usar el atajo en producción.
Para el ejercicio final de este artículo, crea una tabla provisional `task_v2`, añade una columna con ALTER TABLE y prueba el mismo INSERT con columnas omitidas antes y después. El INSERT que funcionaba antes falla con un error "number of values mismatch" en el momento en que se añade una columna.
Verificación de conocimientos
Responde cada pregunta una a una.
Pregunta 2¿Cuál de las siguientes describe correctamente la forma con columnas omitidas, INSERT INTO table_name VALUES (...)?
Pregunta 3¿Cuál de las siguientes es la forma correcta de escribir un INSERT multifila?