Aprende SQL · lección gratuita

Lección 38 · Crear tablas y restricciones: CREATE TABLE

Resumen

CREATE TABLE define la estructura de una tabla: sus columnas, tipos y restricciones (constraints). Las restricciones son reglas que el motor garantiza siempre: integridad de datos por diseño, no por código de aplicación. Es la base del DDL (Data Definition Language).

Sintaxis / Conceptos

CREATE TABLE [IF NOT EXISTS] nombre (
  col1 TIPO restricciones_de_columna,
  col2 TIPO ...,
  [restricciones_de_tabla]
);

Las restricciones pueden ir a nivel de columna (junto al tipo) o a nivel de tabla (al final, útil para claves compuestas o CHECK que cruzan columnas).

Tipos en SQLite (afinidad): INTEGER, REAL, TEXT, BLOB, NUMERIC. SQLite es flexible con tipos, pero las restricciones sí se aplican estrictamente.

Detalles importantes:

SELECT id, nombre, precio, stock FROM productos ORDER BY precio DESC LIMIT 6

Ejemplos

-- CREATE idempotente con todas las restricciones
DROP TABLE IF EXISTS productos_nuevos;
CREATE TABLE productos_nuevos (
  id      INTEGER PRIMARY KEY,                 -- PK autoincremental
  sku     TEXT    NOT NULL UNIQUE,             -- obligatorio y único
  nombre  TEXT    NOT NULL,
  precio  INTEGER NOT NULL CHECK (precio > 0), -- regla de negocio
  costo   INTEGER NOT NULL DEFAULT 0,          -- valor por defecto
  activo  INTEGER NOT NULL DEFAULT 1,
  CHECK (precio >= costo)                      -- CHECK a nivel de tabla
);

-- Insertamos: 'costo' y 'activo' usan su DEFAULT
INSERT INTO productos_nuevos (id, sku, nombre, precio) VALUES
  (1, 'CRM-100', 'CRM Starter', 1200),
  (2, 'ERP-200', 'ERP Básico', 4500);

SELECT * FROM productos_nuevos ORDER BY id;
💡 Define las restricciones en el CREATE TABLE, no en el código de la app: una CHECK (precio > 0) impide datos corruptos vengan de donde vengan. Usa DROP TABLE IF EXISTS + CREATE TABLE para scripts re-ejecutables.

Cheatsheet

RestricciónQué garantiza
PRIMARY KEYIdentificador único por fila (UNIQUE + NOT NULL)
NOT NULLLa columna nunca queda vacía
UNIQUESin valores duplicados
DEFAULT vValor al omitir la columna en el INSERT
CHECK (cond)Cada fila cumple una regla booleana
IF NOT EXISTSNo falla si la tabla ya existe (idempotente)

---

← Eliminar datos: DELETEModificar y borrar estructuras: ALTER, DROP y claves foráneas →

Ver todas las lecciones de Aprende SQL →