====== 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.