Skip to content

2.2 DDL

Si necesitamos crear tablas, definir sus columnas y tipos de datos o establecer relaciones entre datos, utilizaremos el subconjunto DDL (Data Definition Language) de SQL.

Crear tablas

El comando CREATE se utiliza para crear nuevas tablas en la base de datos. La sintaxis básica es:

CREATE TABLE nombre_tabla (
    columna1 tipo_dato [opciones],
    columna2 tipo_dato [opciones]
);

Dependiendo del SGBD, la sintaxis puede variar ligeramente. Aquí tienes un ejemplo de cómo crear una tabla en SQLite:

CREATE TABLE Usuarios (
    ID,
    Nombre,
    Email,
    Edad
);

CREATE TABLE Usuarios (
    ID INTEGER,
    Nombre TEXT,
    Email TEXT,
    Edad INTEGER
);

CREATE TABLE Usuarios (
    ID INTEGER PRIMARY KEY AUTOINCREMENT,
    Nombre TEXT NOT NULL,
    Email TEXT UNIQUE,
    Edad INTEGER CHECK (Edad >= 18)
);

Aqui los equivalentes en mysql:

CREATE TABLE Usuarios (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    Nombre VARCHAR(100),
    Email VARCHAR(100) UNIQUE,
    Edad INT CHECK (Edad >= 0)
);

CREATE TABLE Ranking (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    Nombre VARCHAR(100) NOT NULL,
    Puntuación INT NOT NULL DEFAULT 0,
    Fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Tipos de datos

SQLite tiene tipado dinámico, lo que significa que no es necesario especificar un tipo de dato para cada columna. Sin embargo, es recomendable hacerlo para mantener la claridad y la integridad de los datos. SQLite soporta los siguientes tipos de datos:

Tipo de dato Descripción
INTEGER Números enteros, pueden ser de 1, 2, 3, 4, 6 u 8 bytes.
REAL Números de punto flotante, pueden ser de 4 u 8 bytes.
TEXT Cadenas de texto, pueden ser de longitud variable.
BLOB Datos binarios, como imágenes o archivos.
NULL Representa un valor nulo.
BOOLEAN Representa valores booleanos, aunque en SQLite se almacena como INTEGER (0 para falso, 1 para verdadero).
DATE Fecha, almacenada como texto en formato ISO8601 (YYYY-MM-DD).
TIME Hora, almacenada como texto en formato ISO8601 (HH:MM:SS).
TIMESTAMP Marca de tiempo, almacenada como texto en formato ISO8601 (YYYY-MM-DD HH:MM:SS).
DATETIME Fecha y hora, almacenada como texto en formato ISO8601 (YYYY-MM-DD HH:MM:SS).
JSON Almacena datos en formato JSON, almacenado como texto.

Comparandolos con los de mysql:

Tipo de dato Descripción
INT Números enteros, pueden ser de 1, 2, 3, 4, 6 u 8 bytes.
FLOAT Números de punto flotante, pueden ser de 4 u 8 bytes.
VARCHAR(n) Cadenas de texto de longitud variable, donde n es el número máximo de caracteres.
TEXT Cadenas de texto de longitud variable, sin límite específico.
BLOB Datos binarios, como imágenes o archivos.
NULL Representa un valor nulo.
BOOLEAN Representa valores booleanos, almacenados como TINYINT(1) (0 para falso, 1 para verdadero).
DATE Fecha, almacenada en formato 'YYYY-MM-DD'.
TIME Hora, almacenada en formato 'HH:MM:SS'.
DATETIME Fecha y hora, almacenada en formato 'YYYY-MM-DD HH:MM:SS'.
TIMESTAMP Marca de tiempo, almacenada en formato 'YYYY-MM-DD HH:MM:SS', con la capacidad de actualizar automáticamente al insertar o modificar registros.
JSON Almacena datos en formato JSON, almacenado como texto.

Opciones de columnas

Al definir estos datos, podemos añadir opciones:

Opción Descripción
PRIMARY KEY Define la columna como clave primaria, debe ser única y no nula.
NOT NULL Indica que la columna no puede contener valores nulos.
UNIQUE Asegura que los valores en la columna sean únicos.
DEFAULT Establece un valor predeterminado para la columna si no se proporciona uno.
AUTOINCREMENT Hace que la columna se incremente automáticamente con cada nuevo registro, útil para claves primarias.
CHECK Permite definir una condición que debe cumplirse para los valores de la columna.
REFERENCES Define una clave foránea que hace referencia a otra tabla, estableciendo una relación entre tablas.
COLLATE Define la colación para la columna, que afecta cómo se comparan y ordenan los valores de texto.
VIRTUAL Crea una columna virtual que no almacena datos físicamente, sino que calcula su valor en tiempo de consulta.

Vistas

Las vistas son consultas almacenadas que actúan como tablas virtuales. Se definen con CREATE VIEW y se utilizan para simplificar consultas complejas o para proporcionar una capa de seguridad.

CREATE VIEW nombre_vista AS
SELECT columna1, columna2
FROM nombre_tabla
WHERE condición;

Alterar tablas

En ocasiones necesitamos modificar la estructura de una tabla existente. Eliminando o añadiendo columnas, cambiando tipos de datos, etc. Para ello usamos ALTER TABLE:

ALTER TABLE nombre_tabla
ADD columna_nueva tipo_dato; -- añadir una nueva columna

ALTER TABLE nombre_tabla
DROP COLUMN columna_existente; -- eliminar una columna existente

ALTER TABLE nombre_tabla
RENAME COLUMN columna_antigua TO columna_nueva; -- renombrar una columna

ALTER TABLE nombre_tabla
MODIFY COLUMN columna_existente nuevo_tipo_dato; -- cambiar el tipo de dato de una columna

ALTER TABLE nombre_tabla
ADD CONSTRAINT nombre_restricción CHECK (condición); -- añadir una restricción

ALTER TABLE nombre_tabla
DROP CONSTRAINT nombre_restricción; -- eliminar una restricción

Eliminar tablas

Para eliminar una tabla o vista, usamos DROP TABLE o DROP VIEW:

DROP TABLE nombre_tabla; -- eliminar una tabla
DROP VIEW nombre_vista; -- eliminar una vista
DROP DATABASE nombre_bd; -- eliminar una base de datos

Truncar tablas

Si queremos eliminar todos los registros de una tabla sin eliminar la estructura, usamos TRUNCATE TABLE:

TRUNCATE TABLE nombre_tabla; -- eliminar todos los registros de una tabla