Aprende SQL · lección gratuita

Lección 39 · Modificar y borrar estructuras: ALTER, DROP y claves foráneas

Resumen

Las tablas evolucionan: se agregan columnas, se renombran, se eliminan tablas obsoletas y se conectan entre sí con claves foráneas (FOREIGN KEY). ALTER TABLE cambia la estructura de una tabla existente; DROP TABLE la elimina por completo; una FOREIGN KEY enlaza una tabla hija con su padre para garantizar integridad referencial.

Sintaxis / Conceptos

Límites de ALTER en SQLite. SQLite tiene un ALTER TABLE reducido: soporta ADD COLUMN, RENAME COLUMN, RENAME TO y DROP COLUMN (≥ 3.35), pero no permite agregar restricciones complejas ni cambiar tipos sobre una tabla con datos. El patrón clásico para cambios grandes es: crear tabla nueva con la estructura deseada, INSERT ... SELECT los datos, DROP la vieja y RENAME la nueva.

Claves foráneas. Una FOREIGN KEY se declara en el CREATE TABLE de la tabla hija. En SQLite la verificación de FK está desactivada por defecto; debes ejecutar PRAGMA foreign_keys = ON;. Con FK activas:

DROP TABLE es destructivo e irreversible (fuera de transacción). IF EXISTS lo hace seguro en scripts repetibles.

SELECT id, empresa, pais FROM clientes ORDER BY id LIMIT 5

Ejemplos

-- Reconstrucción idempotente: padre + hija con FK
DROP TABLE IF EXISTS pedidos_demo;
DROP TABLE IF EXISTS clientes_demo;

CREATE TABLE clientes_demo (
  id      INTEGER PRIMARY KEY,
  empresa TEXT NOT NULL
);
CREATE TABLE pedidos_demo (
  id         INTEGER PRIMARY KEY,
  cliente_id INTEGER NOT NULL,
  total      INTEGER NOT NULL,
  FOREIGN KEY (cliente_id) REFERENCES clientes_demo(id)
);

INSERT INTO clientes_demo (id, empresa) VALUES (1, 'TechNova'), (2, 'DataSphere');
INSERT INTO pedidos_demo (id, cliente_id, total) VALUES (1, 1, 5000), (2, 2, 8000);

-- ALTER: agregar columna con DEFAULT y renombrar otra
ALTER TABLE pedidos_demo ADD COLUMN estado TEXT NOT NULL DEFAULT 'Pendiente';
ALTER TABLE pedidos_demo RENAME COLUMN total TO monto;

SELECT p.id, c.empresa, p.monto, p.estado
FROM pedidos_demo p
JOIN clientes_demo c ON c.id = p.cliente_id
ORDER BY p.id;
💡 En SQLite ALTER TABLE es limitado: no cambia tipos ni añade CHECK sobre tablas con datos. Para cambios estructurales grandes, usa el patrón crear-copiar-soltar-renombrar. Y recuerda PRAGMA foreign_keys = ON; o las FK no se respetarán.

Cheatsheet

SentenciaQué hace
ALTER TABLE t ADD COLUMN c TIPO DEFAULT v;Agrega una columna
ALTER TABLE t RENAME COLUMN a TO b;Renombra una columna
ALTER TABLE t RENAME TO nuevo;Renombra la tabla
DROP TABLE IF EXISTS t;Elimina la tabla (idempotente)
FOREIGN KEY (c) REFERENCES p(id)Enlaza hija con padre
PRAGMA foreign_keys = ON;Activa la verificación de FK

---

← Crear tablas y restricciones: CREATE TABLEVistas: CREATE VIEW →

Ver todas las lecciones de Aprende SQL →