SQL Tema 3
Creación de tablas
Una vez que tenemos claras nuestras entidades (e incluso hemos dibujado el diagrama), el siguiente paso es escribir el código para que la base de datos cobre vida. Para ello usamos los comandos de SQL que crean y borran tablas (se llaman comandos DDL, Data Definition Language).
Comandos fundamentales#
CREATE TABLE#
Es el comando principal para definir la estructura de una tabla. La sintaxis básica es:
CREATE TABLE nombre_tabla (
columna1 tipo_dato restricciones,
columna2 tipo_dato restricciones,
...
);DROP TABLE#
Borra una tabla por completo (y todos sus datos). Úsalo con cuidado.
DROP TABLE alumnos;Tipos de datos#
Al igual que en Java, en SQL debemos decirle a la base de datos qué tipo de información guardará cada columna. Estos son los de SQLite:
| Qué guarda | SQLite | MySQL | Ejemplo | Equivalente en Java |
|---|---|---|---|---|
| Números enteros (IDs, edades) | INTEGER | INT | 17 | int (o long) |
| Números decimales | REAL | DOUBLE, o DECIMAL(6, 2) para dinero | 45.5 | double |
| Texto | TEXT | VARCHAR(n), donde n es el máximo de caracteres | 'María' | String |
Dos casos que SQLite no tiene como tipo propio:
| Para guardar… | Se usa | Ejemplo |
|---|---|---|
| Verdadero o falso | INTEGER, con 1 o 0 | activo INTEGER |
| Fechas | TEXT, con el formato año-mes-día | '2026-10-02' |
Nota
En SQL los textos van entre comillas simples: 'María'. Las comillas dobles se reservan para otras cosas.
Restricciones#
Las restricciones aseguran que los datos sean correctos y sigan las reglas del negocio:
| Restricción | Qué asegura | Ejemplo |
|---|---|---|
PRIMARY KEY | Identificador único: no puede repetirse ni estar vacío | id_alumno INTEGER PRIMARY KEY |
AUTOINCREMENT | El ID se genera solo (+1) cada vez que añadimos una fila | id_alumno INTEGER PRIMARY KEY AUTOINCREMENT |
NOT NULL | El campo siempre tiene un valor | nombre TEXT NOT NULL |
UNIQUE | No hay dos filas con el mismo valor | email TEXT UNIQUE |
CHECK | El valor cumple una condición | edad INTEGER CHECK (edad > 0) |
FOREIGN KEY | Conecta una tabla con otra (lo veremos en el tema de tablas relacionadas) | FOREIGN KEY (id_alumno) REFERENCES alumnos(id_alumno) |
Nota
En MySQL, otra base de datos muy usada, AUTOINCREMENT se escribe AUTO_INCREMENT. En SQLite, sin la barra baja.
Ejemplo práctico: la tabla de alumnos de Codemaker#
CREATE TABLE alumnos (
id_alumno INTEGER PRIMARY KEY AUTOINCREMENT,
nombre TEXT NOT NULL,
edad INTEGER CHECK (edad > 0),
telefono TEXT,
email TEXT UNIQUE,
nivel TEXT CHECK (nivel IN ('Junior', 'Senior', 'Master', 'DEV')),
cuota REAL
);CREATE TABLE alumnos (
id_alumno INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL,
edad INT CHECK (edad > 0),
telefono VARCHAR(15),
email VARCHAR(100) UNIQUE,
nivel VARCHAR(10) CHECK (nivel IN ('Junior', 'Senior', 'Master', 'DEV')),
cuota DECIMAL(6, 2)
);Las diferencias están en los tipos (INT, VARCHAR, DECIMAL) y en AUTO_INCREMENT, con barra baja. El resto es igual.
Cuidado
Fíjate en que la última columna no lleva coma antes del paréntesis de cierre. Una coma de más ahí es el error más habitual al crear tablas.
Errores frecuentes#
| Mensaje | Qué significa | Cómo se arregla |
|---|---|---|
near ")": syntax error | Casi siempre, una coma después de la última columna | Quita la coma de la última línea antes del ) |
table alumnos already exists | Intentas crear una tabla que ya existe | Si quieres empezar de cero, bórrala antes con DROP TABLE alumnos; |
no such table: alumnos | La tabla no existe en esta base de datos | Comprueba el nombre y que el script está conectado a la base de datos correcta |