====== 02 - SQL: DDL ======
El **DDL** (*Data Definition Language*) define la estructura de la base de datos: crear, modificar y eliminar tablas y sus restricciones.
===== 1. Tipos de datos =====
^ 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.
===== 2. CREATE TABLE =====
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'').
===== 3. ALTER y DROP =====
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
===== 4. Índices =====
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.
===== 5. Herramientas =====
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
Prueba el DDL contra la misma versión de **MariaDB** que usará la aplicación. Un script que funciona en una herramienta gráfica puede fallar en el servidor real si la sintaxis o el motor difieren.