Aprende leyendo en orden

Crear y modificar tablas

Aprende las definiciones de tablas SQL desde cero. Cubre CREATE TABLE, PRIMARY KEY, la inspección de definiciones y cómo añadir, eliminar y renombrar columnas con ALTER TABLE — todo ejecutándose en vivo en tu navegador.

Sobre el SQL que cubre este curso

Este curso enseña la sintaxis universal de SQL que funciona en los principales RDBMS — MySQL, Oracle, PostgreSQL, SQL Server y más. Los fundamentos como CREATE TABLE / SELECT / WHERE / JOIN / GROUP BY se escriben igual sin importar a qué base de datos cambies.

Por razones técnicas, la consola del navegador ejecuta SQLite, pero siempre que una característica difiera entre bases de datos (la longitud impuesta por los tipos, cómo listar tablas, etc.) verás una nota comparativa como En MySQL escribirías... para que sepas qué usar en otros entornos.

¿Qué es una tabla?

En una base de datos relacional, los datos se almacenan en tablas (rejillas de filas y columnas). Cada tabla está compuesta por columnas y filas (registros), y cada columna tiene un tipo de dato fijo que controla qué valores puede contener.

Diseñar una tabla significa decidir de antemano qué columnas incluir y qué tipo asignar a cada una. Fijar los tipos evita que valores inesperados se cuelen más tarde.

Estructura de la tabla user
Definiciones de columnas (tipos)1 fila = 1 registroidINTEGERnameTEXTageINTEGERcityTEXT1Alice30Tokyo2Bob25Osaka3Carol35Tokyo
Decides los nombres y tipos de columnas de antemano y luego apilas filas (registros) encima. Cada celda contiene un valor que cumple con el tipo de su columna.

CREATE TABLE — crear una tabla

Para crear una tabla usas la sentencia CREATE TABLE. Escribe el nombre de la tabla y luego, entre paréntesis, lista los pares de nombre de columna + tipo separados por comas. No pongas coma después de la última columna.

Fijar los tipos de antemano dificulta que datos inesperados se cuelen (como una cadena terminando en una columna numérica).

-- Crea una tabla listando nombres de columnas y tipos
CREATE TABLE book_record (
  id INTEGER,
  title TEXT,
  price INTEGER,
  published_on TEXT
);

Tipos de datos comunes

Los tipos de datos SQL varían en nombre y detalles entre los distintos sistemas de bases de datos, pero al empezar solo necesitas conocer los siguientes.

TipoValores almacenadosEjemplo de uso
INTEGEREnterosid / age / count
REALNúmeros de punto flotantescore / weight
TEXTCadenasname / address / message
BLOBDatos binariosFlujos de bytes para imágenes, audio, etc.
NUMERICNúmeros en general (incl. fechas, booleanos)Sirve también como fecha / booleano

¿Y los VARCHAR / CHAR / DATETIME de MySQL?

En MySQL y PostgreSQL verás a menudo tipos detallados como VARCHAR(255) / CHAR(13) / BOOLEAN / DATETIME. La consola aquí los acepta sintácticamente, pero la imposición de longitud (como VARCHAR(10) rechazando un carácter número 11) solo entra en juego en RDBMS de tipos estrictos como MySQL o PostgreSQL.

En los ejercicios de este curso, las columnas usan principalmente INTEGER / TEXT / REAL para mantener las cosas simples. Cuando portes una definición a MySQL, puedes reemplazar INTEGER por INT y TEXT por VARCHAR(N) o TEXT — la estructura del CREATE TABLE en sí se mantiene igual.

Intenta crear una tabla book_record para almacenar libros. (Ejecútalo correctamente y aparecerá la explicación.)

① En la primera línea, escribe DROP TABLE IF EXISTS book_record; para eliminar cualquier book_record existente.

② A continuación, escribe CREATE TABLE book_record (...) con tres columnas: id INTEGER, title TEXT y price INTEGER.

③ Para verificar, termina con SELECT name FROM sqlite_master WHERE type='table'; y confirma que book_record aparece en la lista.

Editor SQL

Ejecutar una consulta para ver el resultado

PRIMARY KEY — identificar una fila de forma única

Una clave primaria (PRIMARY KEY — una columna usada para identificar una fila de forma única) es una columna cuyos valores deben ser únicos y nunca NULL. Conviertes una columna en clave primaria cuando sus valores siempre deben existir y nunca colisionar, como un número de empleado o un ID de usuario.

Con una clave primaria establecida puedes recuperar de forma fiable una sola fila. Como regla, cada tabla debe tener exactamente una clave primaria.

Tres propiedades de una PRIMARY KEY
PropiedadSignificadoViolación / EfectoUnicidadSin valores duplicados✗ Violación de UNIQUEObligatorioNo se permite NULL✗ Violación de NOT NULLAutonumeradoSolo INTEGER PRIMARY KEYRellena un entero sin usarsi INSERT lo omite
Una clave primaria es una columna con tres propiedades: es única, no permite NULL y (con INTEGER PRIMARY KEY) los valores se autonumeran. Cada tabla debe tener exactamente una.
-- Añade PRIMARY KEY después de la definición de la columna
CREATE TABLE member (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  joined_on TEXT
);

INTEGER PRIMARY KEY autonumera

Una columna declarada como INTEGER PRIMARY KEY se autonumera empezando desde 1 cada vez que haces INSERT sin especificar su valor. En MySQL la misma autonumeración se escribe como id INT PRIMARY KEY AUTO_INCREMENT, y en PostgreSQL como id SERIAL PRIMARY KEY. En la consola de este curso, INTEGER PRIMARY KEY es suficiente.

Si haces INSERT con un valor explícito, se usa ese valor, y la siguiente autonumeración continúa desde el entero inmediatamente posterior.

Intenta crear una tabla member para almacenar miembros, con id como clave primaria.

① Escribe DROP TABLE IF EXISTS member; para eliminar cualquier member existente.

② Escribe CREATE TABLE member (...) con tres columnas: id INTEGER PRIMARY KEY, name TEXT NOT NULL y joined_on TEXT.

③ Escribe INSERT INTO member (name, joined_on) VALUES ('Frank', '2026-04-01'), ('Grace', '2026-04-02'); para insertar dos filas sin especificar id.

④ Termina con SELECT * FROM member; para confirmar que id se autonumeró.

Editor SQL

Ejecutar una consulta para ver el resultado

Probar una violación de restricción — cómo funciona NOT NULL

Vamos a romper una regla deliberadamente para ver cómo funcionan las restricciones (reglas que los valores de una columna deben cumplir) como NOT NULL y PRIMARY KEY. NOT NULL es una regla que no permite NULL en la columna. Añadirla a campos obligatorios (nombre, dirección de correo electrónico, etc.) evita que se cuelen filas incompletas.

La tabla user creada al inicio del artículo se definió con name TEXT NOT NULL. Si intentas insertar NULL en la columna name, la base de datos rechazará el INSERT y devolverá un error.

Cómo se comporta la restricción NOT NULL
name que se insertaComprobación NOT NULLResultado'Alice'OK(valor presente)○ Inserción con éxito'' (cadena vacía)OK(cadena vacía ≠ NULL)○ Inserción con éxitoNULLViolación(NULL no permitido)✗ NOT NULLconstraint failed
Un INSERT que pone NULL en una columna NOT NULL es rechazado con un error. La cadena vacía ('') se trata como un valor distinto de NULL, así que un INSERT con cadena vacía sí pasa — ten presente esa distinción.

La columna name de la tabla user se define con la restricción NOT NULL. Inserta NULL deliberadamente para ver el error de violación de restricción.

① Ejecuta el INSERT INTO user (...) VALUES (10, NULL, 30, 'Tokyo'); preparado (como estás intentando poner NULL en name, deberías obtener un error como NOT NULL constraint failed: user.name).

(Este ejercicio es correcto cuando aparece un error — ese es exactamente el papel de una restricción: mantener los datos inválidos fuera antes de que entren.)

-- INSERT que provoca una violación de NOT NULL en el Ejercicio 3
INSERT INTO user (id, name, age, city)
  VALUES (10, NULL, 30, 'Tokyo');

Editor SQL

Ejecutar una consulta para ver el resultado

Inspeccionar y eliminar tablas

Después de crear una tabla, querrás comprobar qué tablas existen y qué columnas tiene cada una. La consola de aquí usa estas dos consultas:

- Lista de tablas: SELECT name FROM sqlite_master WHERE type='table';

- Definiciones de columnas: PRAGMA table_info(table_name);

En MySQL escribirías SHOW TABLES; y DESCRIBE table_name;; Oracle usa SELECT table_name FROM user_tables;. Cada base de datos tiene su propia sintaxis dedicada. DROP TABLE para eliminar una tabla funciona igual en todas las bases de datos.

-- ① Lista todas las tablas
SELECT name FROM sqlite_master WHERE type='table';

-- ② Muestra las definiciones de columnas de la tabla user
PRAGMA table_info(user);

-- ③ Elimina una tabla
DROP TABLE IF EXISTS book_record;

Echa un vistazo dentro de la tabla user configurada al inicio del artículo y luego practica eliminar una tabla que ya no necesitas.

① Escribe PRAGMA table_info(user); para mostrar las definiciones de columnas de la tabla user.

② Mira la columna pk en el resultado para ver qué columna es la clave primaria.

③ Elimina la tabla book_record que creaste en el Ejercicio 1 con DROP TABLE IF EXISTS book_record;.

④ Por último, ejecuta SELECT name FROM sqlite_master WHERE type='table'; y confirma que book_record ya no está en la lista.

Editor SQL

Ejecutar una consulta para ver el resultado

ALTER TABLE — modificar una definición existente

Una vez que tu sistema está en producción, las peticiones del tipo "añade una columna más" o "renombra la tabla" son inevitables. Ahí es donde entra ALTER TABLE. Las cuatro operaciones cubiertas aquí funcionan en MySQL y PostgreSQL con una sintaxis casi idéntica.

OperaciónSintaxisUso
Renombrar una tablaALTER TABLE old_name RENAME TO new_name;Renombra la tabla entera
Añadir una columnaALTER TABLE table ADD COLUMN col type;Añade un nuevo atributo
Eliminar una columnaALTER TABLE table DROP COLUMN col;Elimina un atributo no utilizado
Renombrar una columnaALTER TABLE table RENAME COLUMN old TO new;Renombra una columna
Las cuatro operaciones de ALTER TABLE
RENAME TORenombrar la tablaADD COLUMNAñadir columnaDROP COLUMNEliminar columnaRENAME COLUMNRenombrar columna
Saber renombrar una tabla, añadir una columna, eliminar una columna y renombrar una columna cubre casi todos los cambios de definición que harás en la práctica.

MODIFY / CHANGE COLUMN / AFTER de MySQL

En MySQL puedes cambiar el tipo de una columna con ALTER TABLE table MODIFY col type;, cambiar el nombre y el tipo de una columna a la vez con CHANGE COLUMN old new type;, y eliminar la clave primaria con DROP PRIMARY KEY;.

-- Renombra la tabla
ALTER TABLE user RENAME TO user_record;

-- Añade una columna (la columna email se agrega al final)
ALTER TABLE user_record ADD COLUMN email TEXT;

-- Renombra una columna
ALTER TABLE user_record RENAME COLUMN city TO area;

-- Elimina una columna
ALTER TABLE user_record DROP COLUMN email;

Aplica las tres operaciones de ALTER TABLE (añadir, renombrar, eliminar) a la tabla user en secuencia. (Este es el último ejercicio del artículo.)

① Añade la columna email con ALTER TABLE user ADD COLUMN email TEXT;.

② Renombra la columna city a area con ALTER TABLE user RENAME COLUMN city TO area;.

③ Elimina la columna email que añadiste con ALTER TABLE user DROP COLUMN email;.

④ Por último, ejecuta PRAGMA table_info(user); y confirma que area está en su sitio tras el renombrado y que email ya no está.

Editor SQL

Ejecutar una consulta para ver el resultado
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Cuál de las siguientes describe correctamente una clave primaria (PRIMARY KEY)?

Pregunta 2¿Cuál es la forma más adecuada de inspeccionar las definiciones de columnas de la tabla user en la consola de este curso?

Pregunta 3¿Cuál de estas describe correctamente cómo se comporta ALTER TABLE en la consola de este curso?