En SQL, hemos aprendido a consultar, modificar y controlar datos. Pero antes de todo eso, necesitamos algo fundamental: crear la estructura donde vivirán los datos.
Ahí entra en juego el DDL (Data Definition Language) o Lenguaje de Definición de Datos, que nos permite definir, modificar y eliminar objetos dentro de una base de datos: tablas, vistas, índices, procedimientos y más.
En esta entrega aprenderás los tres comandos esenciales del DDL: CREATE, ALTER y DROP. Veremos cómo funcionan, sus diferencias con DML, y ejemplos prácticos que puedes ejecutar en db-fiddle.com.
¿Qué es DDL en SQL?
El DDL (Data Definition Language) define la estructura y el esquema de una base de datos.
A diferencia del DML (Data Manipulation Language), que trabaja con los datos (INSERT, UPDATE, DELETE), el DDL trabaja con los objetos que los contienen.
Principales comandos del DDL:
| Comando | Descripción |
|---|---|
| CREATE | Crea un nuevo objeto (tabla, vista, índice, base de datos, etc.) |
| ALTER | Modifica un objeto existente (por ejemplo, una tabla) |
| DROP | Elimina un objeto permanentemente |
Estos comandos afectan la estructura, no el contenido. Una vez ejecutados, suelen tener efectos permanentes (especialmente DROP).
Diferencia entre DDL y DML
| Aspecto | DDL | DML |
|---|---|---|
| Enfoque | Estructura | Datos |
| Ejemplos | CREATE, ALTER, DROP | INSERT, UPDATE, DELETE |
| Transacciones | Generalmente automáticas | Controladas por el usuario |
| Uso típico | Crear o modificar tablas | Insertar o cambiar registros |
Ejemplo práctico
Comencemos con un ejemplo reproducible en db-fiddle.com.
Imagina que estamos construyendo una base de datos para una empresa que quiere registrar sus empleados y departamentos.
1. Crear una tabla con CREATE TABLE
-- Crear la tabla departamentos
CREATE TABLE departamentos (
id_departamento INTEGER PRIMARY KEY,
nombre TEXT NOT NULL
);
-- Crear la tabla empleados
CREATE TABLE empleados (
id_empleado INTEGER PRIMARY KEY,
nombre TEXT NOT NULL,
puesto TEXT NOT NULL,
salario REAL,
id_departamento INTEGER,
FOREIGN KEY (id_departamento) REFERENCES departamentos(id_departamento)
); ✅ Qué hace este código:
- Define dos tablas:
departamentosyempleados. - Usa una clave foránea (FOREIGN KEY) para conectar ambas.
- Establece reglas de integridad: no se puede asignar un
id_departamentoque no exista.
2. Insertar algunos datos iniciales
INSERT INTO departamentos (id_departamento, nombre)
VALUES
(1, 'Recursos Humanos'),
(2, 'Finanzas'),
(3, 'Tecnología');
INSERT INTO empleados (id_empleado, nombre, puesto, salario, id_departamento)
VALUES
(1, 'Ana López', 'Analista', 1200, 1),
(2, 'Carlos Ruiz', 'Desarrollador', 1800, 3),
(3, 'Lucía Gómez', 'Contadora', 1500, 2); 3. Modificar la estructura con ALTER TABLE
Ahora necesitamos agregar una nueva columna para guardar la fecha de contratación.
ALTER TABLE empleados
ADD COLUMN fecha_contratacion TEXT; Y si deseamos cambiar el nombre de una columna (solo en algunos motores, como SQL Server o PostgreSQL):
-- Cambiar nombre de columna (solo SQL Server)
EXEC sp_rename 'empleados.puesto', 'cargo', 'COLUMN'; 💡 En SQLite, no es posible cambiar nombres de columnas con ALTER TABLE; se debe recrear la tabla.
4. Eliminar un objeto con DROP
Cuando ya no necesitamos una tabla o queremos limpiar la base de datos:
-- Eliminar una tabla
DROP TABLE empleados;
-- Eliminar una base de datos (solo en algunos motores)
DROP DATABASE empresa; ⚠️ Advertencia:DROP elimina el objeto y todos sus datos de forma permanente. No hay “papelera de reciclaje” en SQL, por eso siempre conviene hacer un backup previo.
Diferencias entre motores SQL
| Motor | Cambiar nombre de columna | Agregar columna | Eliminar columna |
|---|---|---|---|
| SQLite | No (recrear tabla) | Sí | Desde la versión 3.35 |
| SQL Server | Sí (sp_rename) | Sí | Sí |
| MySQL | Sí (ALTER TABLE ... CHANGE) | Sí | Sí |
| PostgreSQL | Sí (ALTER TABLE ... RENAME COLUMN) | Sí | Sí |
Buenas prácticas con DDL
- Planifica antes de crear: define tipos de datos adecuados.
- Evita eliminar tablas sin respaldo.
- Usa nombres consistentes (en minúsculas, sin espacios, descriptivos).
- Registra los cambios estructurales en un control de versiones (como Git).
- Prueba en entornos de desarrollo antes de ejecutar DDL en producción.
Prueba este script
Puedes probar este ejemplo completo copiando y pegando el siguiente bloque en db-fiddle.com:
CREATE TABLE departamentos (
id_departamento INTEGER PRIMARY KEY,
nombre TEXT NOT NULL
);
CREATE TABLE empleados (
id_empleado INTEGER PRIMARY KEY,
nombre TEXT NOT NULL,
puesto TEXT NOT NULL,
salario REAL,
id_departamento INTEGER,
FOREIGN KEY (id_departamento) REFERENCES departamentos(id_departamento)
);
INSERT INTO departamentos VALUES
(1, 'Recursos Humanos'),
(2, 'Finanzas'),
(3, 'Tecnología');
INSERT INTO empleados VALUES
(1, 'Ana López', 'Analista', 1200, 1),
(2, 'Carlos Ruiz', 'Desarrollador', 1800, 3),
(3, 'Lucía Gómez', 'Contadora', 1500, 2);
ALTER TABLE empleados ADD COLUMN fecha_contratacion TEXT;
SELECT * FROM empleados; Conclusión
El DDL es el punto de partida para construir bases de datos sólidas.
Con CREATE, ALTER y DROP defines las reglas del juego: cómo se guardan, relacionan y eliminan los datos.
Dominar estos comandos te da control total sobre la estructura, y es el paso natural después de aprender a manipular información con DML.