El comando CREATE TABLE en SQL se utiliza para crear una nueva tabla en una base de datos. Es uno de los comandos fundamentales del lenguaje de definición de datos (DDL), ya que permite establecer la estructura que almacenará los registros: columnas, tipos de datos, restricciones y relaciones con otras tablas.
Entender cómo se usa correctamente CREATE TABLE es clave para diseñar bases de datos eficientes, seguras y fáciles de mantener.
Sintaxis básica de CREATE TABLE
La forma más simple es:
CREATE TABLE nombre_tabla (
columna1 tipo_dato [restricciones],
columna2 tipo_dato [restricciones],
...
);
- nombre_tabla: el identificador único de la tabla.
- columna1, columna2…: los nombres de las columnas.
- tipo_dato: el tipo de dato permitido (
INT,VARCHAR,DATE,DECIMAL, etc.). - restricciones: reglas opcionales que aseguran la integridad de los datos (
NOT NULL,PRIMARY KEY,CHECK, etc.).
Ejemplo simple de CREATE TABLE
CREATE TABLE clientes (
id INT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(150),
fecha_registro DATE
);
👉 Aquí creamos una tabla llamada clientes con 4 columnas:
id: identificador único, clave primaria.nombre: texto obligatorio.email: texto opcional.fecha_registro: fecha del alta.
Tipos de datos comunes en CREATE TABLE
- Enteros:
INT,BIGINT,SMALLINT. - Decimales y números reales:
DECIMAL(10,2),FLOAT. - Texto:
VARCHAR(n),CHAR(n),TEXT. - Fecha y hora:
DATE,DATETIME,TIMESTAMP. - Booleanos:
BOOLEAN(oTINYINTen algunos motores).
👉 Elegir el tipo de dato correcto es fundamental para optimizar el almacenamiento y garantizar la validez de los datos.
Restricciones más usadas en CREATE TABLE
- PRIMARY KEY: identifica de forma única cada fila.
- FOREIGN KEY: relaciona la tabla con otra.
- UNIQUE: asegura que los valores no se repitan.
- NOT NULL: evita valores nulos en una columna.
- CHECK: impone condiciones lógicas.
- DEFAULT: asigna un valor por defecto.
Ejemplo:
CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
edad INT CHECK (edad >= 18),
salario DECIMAL(10,2) DEFAULT 0,
departamento_id INT,
FOREIGN KEY (departamento_id) REFERENCES departamentos(id)
);
👉 Esta tabla define validaciones y relaciones:
- Ningún empleado puede tener edad < 18.
- Si no se especifica salario, será 0.
- Cada empleado pertenece a un departamento existente.
CREATE TABLE con clave compuesta
Se pueden definir claves primarias formadas por varias columnas:
CREATE TABLE inscripciones (
estudiante_id INT,
curso_id INT,
fecha DATE,
PRIMARY KEY (estudiante_id, curso_id)
);
👉 Garantiza que un estudiante no pueda inscribirse dos veces al mismo curso.
Crear tabla a partir de otra (CREATE TABLE AS)
Algunos motores permiten crear una tabla nueva a partir del resultado de una consulta:
CREATE TABLE clientes_activos AS
SELECT * FROM clientes WHERE activo = 1;
👉 Crea una nueva tabla clientes_activos con los datos actuales de clientes (similar a usar una subconsulta).
(Nota: depende del motor, a veces no copia restricciones ni índices.)
Diferencias entre CREATE TABLE y ALTER TABLE
- CREATE TABLE: define una tabla nueva desde cero.
- ALTER TABLE: modifica una tabla ya existente (añadir columnas, cambiar tipos, etc.).
Ejemplo:
- Crear tabla:
CREATE TABLE productos (id INT PRIMARY KEY, nombre VARCHAR(100)); - Modificar tabla:
ALTER TABLE productos ADD COLUMN precio DECIMAL(10,2);
Errores comunes al usar CREATE TABLE
- Olvidar definir una clave primaria: dificulta identificar registros únicos.
- Elegir tipos de datos incorrectos: guardar precios en
VARCHARen lugar deDECIMAL. - Usar nombres reservados como nombre de tabla o columna (
order,user,select). - No normalizar la base de datos: incluir datos redundantes en una sola tabla.
- Omitir restricciones necesarias: permite datos inválidos (ej. edades negativas, emails duplicados).
Buenas prácticas con CREATE TABLE
- Siempre definir una PRIMARY KEY.
- Usar nombres claros y consistentes (ej.
clientes,pedidos, notabla1). - Elegir tipos de datos adecuados al uso real.
- Definir restricciones (
NOT NULL,CHECK,UNIQUE) para asegurar calidad de datos. - Documentar la estructura de la tabla en scripts SQL versionados.
- Evitar usar
SELECT *enCREATE TABLE ASsi querés control total de la estructura.
Ejemplo avanzado: sistema de pedidos
CREATE TABLE clientes (
id INT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE,
fecha_registro DATE DEFAULT CURRENT_DATE
);
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT NOT NULL,
fecha DATE NOT NULL,
total DECIMAL(10,2) CHECK (total >= 0),
FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);
👉 Con este diseño:
clientesalmacena datos de usuarios, con email único.pedidosregistra compras, vinculadas obligatoriamente a un cliente.- Se evita registrar pedidos sin cliente o con montos negativos.
Preguntas frecuentes (FAQ)
1. ¿CREATE TABLE elimina una tabla existente?
No. Si la tabla ya existe, devolverá error. Para recrearla, primero hay que usar DROP TABLE.
2. ¿Qué pasa si no defino restricciones?
La tabla funcionará, pero será más propensa a datos inválidos o inconsistentes.
3. ¿Puedo copiar la estructura de una tabla sin los datos?
Sí, con CREATE TABLE nueva LIKE original en MySQL, o usando CREATE TABLE ... AS SELECT ... WHERE 1=0 en otros motores.
4. ¿Se puede cambiar el nombre de una tabla creada?
Sí, con ALTER TABLE nombre_viejo RENAME TO nombre_nuevo;.
5. ¿Es obligatorio definir PRIMARY KEY?
No es obligatorio, pero sí una buena práctica en casi todos los casos.
Conclusión
El comando CREATE TABLE en SQL es la base del diseño de cualquier base de datos. Permite definir estructuras con tipos de datos y restricciones que aseguren la integridad de la información.
Un buen diseño de tablas desde el inicio facilita la escalabilidad, el mantenimiento y evita errores comunes.
Dominar CREATE TABLE, junto con restricciones y tipos de datos, es fundamental para trabajar de forma profesional con SQL.
Profundiza en creación y cambios de estructuras en CREATE / ALTER TABLE y vuelve al Glosario SQL completo.