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