Aprende SQL

Creando tablas: CREATE TABLE

Con CREATE TABLE defines la estructura de una nueva tabla, especificando sus columnas, tipos de datos y restricciones.

CREATE TABLE
players
idINTEGERPK
nameTEXTNOT NULL
emailTEXTUNIQUE
levelINTEGERDEFAULT 1

Sintaxis básica

CREATE TABLE nombre_tabla (
  columna1 tipo restricciones,
  columna2 tipo restricciones,
  ...
);

Tipos de datos comunes

TipoDescripción
INTEGERNúmeros enteros
TEXTCadenas de texto
REALNúmeros decimales

Restricciones

RestricciónDescripción
PRIMARY KEYIdentificador único de cada fila
NOT NULLLa columna no puede tener valores nulos
UNIQUECada valor debe ser único en la columna
DEFAULTValor por defecto si no se especifica uno
CHECKValida que el valor cumpla una condición

La restricción CHECK te permite definir reglas de validación directamente en la tabla. Por ejemplo, para asegurar que el nivel de un jugador sea siempre positivo:

level INTEGER NOT NULL CHECK(level > 0)

IF NOT EXISTS

Si intentas crear una tabla que ya existe, SQL dará un error. Para evitarlo, usa IF NOT EXISTS:

CREATE TABLE IF NOT EXISTS players (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  level INTEGER NOT NULL DEFAULT 1
);

Con IF NOT EXISTS, la sentencia simplemente no hace nada si la tabla ya existe. Esto es muy útil en scripts de inicialización que pueden ejecutarse más de una vez.

AUTOINCREMENT con INTEGER PRIMARY KEY

En SQLite, cuando defines una columna como INTEGER PRIMARY KEY, automáticamente se convierte en un campo auto-incrementable. Si no especificas un valor al insertar, SQLite asigna el siguiente número disponible:

CREATE TABLE players (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL
);

INSERT INTO players (name) VALUES ('Ana');    -- id = 1 (automático)
INSERT INTO players (name) VALUES ('Carlos'); -- id = 2 (automático)

No necesitas escribir AUTOINCREMENT explícitamente. De hecho, SQLite recomienda no hacerlo a menos que necesites garantizar que los ids nunca se reutilicen, incluso después de borrar registros.

Ejemplo completo

CREATE TABLE players (
  id INTEGER PRIMARY KEY,
  name TEXT NOT NULL,
  email TEXT UNIQUE,
  level INTEGER NOT NULL DEFAULT 1,
  score INTEGER DEFAULT 0
);

Claves foráneas

Las claves foráneas relacionan tablas entre sí:

CREATE TABLE scores (
  id INTEGER PRIMARY KEY,
  player_id INTEGER NOT NULL,
  game_id INTEGER NOT NULL,
  points INTEGER NOT NULL,
  FOREIGN KEY (player_id) REFERENCES players(id)
);

Ejercicios