Contenido de esta guía
Qué define CREATE TABLE
CREATE TABLE crea una estructura donde se almacenarán filas. Dentro de los paréntesis declaras las columnas, sus tipos y las restricciones que protegen la integridad de los datos.
Diseñar una tabla no consiste solo en elegir nombres. También debes decidir qué dato identifica cada fila, qué campos son obligatorios, qué valores son válidos y qué relaciones existen con otras tablas.
Sintaxis básica
CREATE TABLE tareas_demo (
id INTEGER PRIMARY KEY,
titulo VARCHAR(120) NOT NULL,
prioridad INTEGER NOT NULL DEFAULT 1,
completada INTEGER NOT NULL DEFAULT 0,
CHECK (prioridad BETWEEN 1 AND 3)
);PRIMARY KEYidentifica cada fila.NOT NULLimpide omitir un valor.DEFAULTaporta un valor cuando la inserción no lo especifica.CHECKrechaza prioridades fuera del intervalo permitido.
Insertar y consultar datos
INSERT INTO tareas_demo (id, titulo, prioridad)
VALUES (1, 'Revisar pedidos', 2),
(2, 'Actualizar inventario', 3);
SELECT id, titulo, prioridad, completada
FROM tareas_demo
ORDER BY id;| id | titulo | prioridad | completada |
|---|---|---|---|
| 1 | Revisar pedidos | 2 | 0 |
| 2 | Actualizar inventario | 3 | 0 |
La inserción no proporciona completada, por lo que la tabla utiliza su valor predeterminado, 0.
Elige tipos por significado, no solo por apariencia. Un teléfono, código postal o número de factura puede contener dígitos y seguir siendo texto porque no se utiliza para cálculos aritméticos.
Error frecuente
Crear columnas sin reglas
Una tabla que acepta cualquier valor desplaza todos los controles a la aplicación. Si varias aplicaciones escriben en la misma base, las reglas pueden aplicarse de forma desigual.
Declara en la base las invariantes reales: claves, nulabilidad, unicidad, relaciones y rangos válidos. No añadas restricciones arbitrarias que el negocio no exige.
Comprueba lo aprendido
Crea una tabla de categorías
Define categorias_demo con un identificador entero, un nombre obligatorio que no pueda repetirse y una columna activa cuyo valor predeterminado sea 1.
NOT NULL y UNIQUE.DEFAULT 1 para la columna activa.Solución razonada
CREATE TABLE categorias_demo (
id INTEGER PRIMARY KEY,
nombre VARCHAR(100) NOT NULL UNIQUE,
activa INTEGER NOT NULL DEFAULT 1
);La clave identifica la fila, UNIQUE evita nombres duplicados y el valor predeterminado permite omitir activa al insertar una categoría habilitada.
Compatibilidad entre motores
Para decidir entre enteros, decimales, texto y fechas, consulta la comparativa de tipos de datos SQL.
La estructura general de CREATE TABLE es común, pero los tipos de datos, la generación automática de identificadores, las columnas calculadas y varias opciones físicas cambian entre motores. INTEGER PRIMARY KEY tiene un comportamiento especial en SQLite; MySQL utiliza opciones como AUTO_INCREMENT; PostgreSQL y SQL Server ofrecen otras formas de identidad. No presentes una de estas variantes como SQL universal.
Qué debes recordar
CREATE TABLEdefine columnas y reglas, no solo un contenedor vacío.- Las restricciones protegen la integridad desde la base de datos.
- Los tipos deben representar el significado del dato.
- La generación automática de claves cambia entre motores.
Si un INSERT falla porque el texto no cabe en una columna VARCHAR, revisa el diagnóstico de valores demasiado largos: cómo diagnosticar un valor demasiado largo para VARCHAR.