Aprende leyendo en orden

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.

Piezas sintácticas de una sentencia INSERT
INSERT INTO table(lista de columnas)VALUES (lista de valores);Tabla objetivoColumnas a rellenar(opcional)Lista de valores(en orden de columnas)
Una sentencia INSERT enlaza tres bloques: 'INSERT INTO table_name', '(lista de columnas)' y 'VALUES (lista de valores);'. La lista de columnas es opcional — al omitirla, los valores deben cubrir todas las columnas, en el orden en que se definieron.

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.

Estructura de un INSERT (forma básica)
INSERT INTO(lista de columnas)VALUES (lista de valores)Nombre de tablabookColumnas a rellenar(title, price)Lista de valores('Intro a SQL', 1980)Tabla objetivoElige columnasLista valores
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).

Imagina registrar un nuevo libro en una base de datos de libros. (Ejecútalo correctamente y aparecerá la explicación.)

① Inserta 1 fila en la tabla book.

② Especifica solo dos columnas, title y price. Los valores son title='SQL práctico' y price=2480.

③ Por último, ejecuta SELECT * FROM book; y confirma que id se autonumeró y published_on es NULL.

Editor SQL

Ejecutar una consulta para ver el resultado

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.

Forma con columnas con nombre vs. forma con columnas omitidas
Solo las columnas necesarias / ALTER seguroTodas las columnas en orden / se rompe con ALTERForma con columnas con nombre(recomendada)INSERT INTO task (title, done) VALUES ('Limpiar', 0);Forma con columnas omitidas(atajo)INSERT INTO task VALUES ('Limpiar', 0);
La forma con nombre detalla solo las columnas que vas a rellenar; la forma omitida lista todas las columnas en orden. La versión más corta es frágil cuando se añaden columnas más tarde.
-- 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".

Imagina registrar una nueva tarea en una app de tareas pendientes.

① INSERT 1 fila en la tabla task con la lista de columnas omitida.

② El orden de columnas de task es titledone. Usa title='Compras' y done=0, en ese orden.

③ Por último, ejecuta SELECT * FROM task; y confirma que la fila se registró.

Editor SQL

Ejecutar una consulta para ver el resultado

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;
INSERT multifila — cada () en VALUES es una fila
idnameprice() en VALUES1(auto)Manzana150('Manzana', 150)2(auto)Plátano100('Plátano', 100)3(auto)Naranja200('Naranja', 200)Fila 1Fila 2Fila 3
Un () después de VALUES añade una fila; N () separados por comas añaden N filas. Dentro de cada (), los valores siguen el mismo orden que la lista de columnas.

Imagina sembrar un sitio de comercio electrónico con tres productos iniciales.

① INSERT 3 filas a la vez en la tabla product.

② Especifica dos columnas, name y price. Las tres filas son ('Lápiz', 80) / ('Goma', 120) / ('Cuaderno', 250).

③ Por último, ejecuta SELECT * FROM product; y confirma 3 filas con valores id autonumerados.

Editor SQL

Ejecutar una consulta para ver el resultado

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.

Crea una tabla provisional task_v2 y observa cómo el INSERT con columnas omitidas se rompe tras un ALTER TABLE.

① Elimina cualquier tabla con el mismo nombre con DROP TABLE IF EXISTS task_v2;, luego crea una tabla de 2 columnas con CREATE TABLE task_v2 (title TEXT, done INTEGER);.

② Ejecuta INSERT INTO task_v2 VALUES ('Compras', 0); — esto tiene éxito mientras la tabla tiene 2 columnas (la forma con columnas omitidas funciona).

③ Ejecuta ALTER TABLE task_v2 ADD COLUMN due_on TEXT; para añadir una 3.ª columna.

④ Ejecuta INSERT INTO task_v2 VALUES ('Leer', 0); de nuevo. Esta vez solo 2 valores para 3 columnas — debería ser rechazado con un error.

(Este ejercicio es correcto cuando aparece un error.)

Editor SQL

Ejecutar una consulta para ver el resultado
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

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?

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?