El DDL (*Data Definition Language*) define la estructura de la base de datos: crear, modificar y eliminar tablas y sus restricciones.
| Tipo | Uso |
|---|---|
BIGINT, INT | Números enteros (identificadores, cantidades) |
DECIMAL(10,2) | Números exactos con decimales (precios) |
VARCHAR(n) | Texto de longitud variable limitada |
TEXT | Texto largo (descripciones) |
BOOLEAN | TRUE/FALSE |
DATE | Fecha sin hora |
TIMESTAMP | Fecha y hora |
Para dinero se usa DECIMAL, nunca FLOAT ni DOUBLE: son aproximados.
CREATE TABLE book (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200) NOT NULL,
isbn VARCHAR(13) UNIQUE,
price DECIMAL(10,2) NOT NULL DEFAULT 0.00,
published_date DATE,
publisher_id BIGINT,
FOREIGN KEY (publisher_id) REFERENCES publisher (id)
);
| Restricción | Función |
|---|---|
PRIMARY KEY | Identifica cada fila; única y no nula |
NOT NULL | Columna obligatoria |
UNIQUE | No admite valores repetidos |
DEFAULT | Valor cuando no se indica |
FOREIGN KEY | Referencia a otra tabla; mantiene la integridad referencial |
AUTO_INCREMENT | Genera el siguiente valor automáticamente |
La integridad referencial impide insertar un libro con publisher_id inexistente o borrar una editorial que tenga libros (salvo que se configure ON DELETE CASCADE o SET NULL).
ALTER TABLE book ADD COLUMN synopsis TEXT; ALTER TABLE book MODIFY COLUMN title VARCHAR(300) NOT NULL; ALTER TABLE book DROP COLUMN synopsis; DROP TABLE book; -- elimina tabla y datos TRUNCATE TABLE book; -- vacía los datos, conserva la estructura
Un índice acelera las consultas por una columna concreta, al precio de espacio y escritura algo más lenta:
CREATE INDEX idx_book_title ON book (title);
Las claves primaria y foráneas crean índices automáticamente; los índices extra se añaden cuando las consultas lo piden.
Las sentencias DDL se ejecutan desde un cliente como DBeaver o la consola de mysql. En un proyecto real, el esquema se versiona con migraciones (p. ej. Flyway): scripts SQL numerados que se aplican en orden:
src/main/resources/db/migration/ ├── V1__create_publisher_and_book.sql └── V2__add_book_author_table.sql