CREATE TABLE en MySQL: cómo crear tablas
Aprende a crear tablas en MySQL con CREATE TABLE, claves primarias, tipos de datos, índices y ejemplos prácticos.
Actualizado el
Para crear una tabla en MySQL se usa CREATE TABLE: defines sus columnas, los tipos de datos y las restricciones que debe cumplir cada una.
Esta guía trata la sentencia CREATE TABLE para crear tablas dentro de una base de datos MySQL. Si necesitas generar el marcado de una tabla HTML desde PHP, consulta cómo crear una tabla HTML con PHP.
Sintaxis básica
CREATE TABLE nombre_tabla (
columna1 tipo_dato restricciones,
columna2 tipo_dato restricciones
);Ejemplo:
CREATE TABLE productos (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
precio DECIMAL(10, 2) NOT NULL,
stock INT NOT NULL DEFAULT 0
);Esta tabla guarda productos con un id autoincremental, nombre, precio y stock. La elección entre INT, DECIMAL, VARCHAR y otros tipos depende del dato que vayas a guardar; la guía de tipos de datos en MySQL resume los casos habituales.
Crear una tabla solo si no existe
CREATE TABLE IF NOT EXISTS clientes (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL UNIQUE
);IF NOT EXISTS evita el error si la tabla ya existe, pero no comprueba que la tabla existente tenga la misma definición.
Restricciones habituales
| Restricción | Para qué sirve |
|---|---|
PRIMARY KEY | Identifica cada fila de forma única y crea el índice correspondiente. |
AUTO_INCREMENT | Genera un número automático sobre una columna entera indexada; solo puede haber una por tabla. |
NOT NULL | Obliga a que la columna tenga valor. |
UNIQUE | Impide valores duplicados, aunque MySQL permite varios NULL. |
DEFAULT | Define un valor por defecto. |
FOREIGN KEY | Relaciona una tabla con otra, normalmente con InnoDB. |
Una tabla solo puede tener una PRIMARY KEY, aunque puede estar formada por varias columnas; todas sus columnas son NOT NULL. Puedes definir varias restricciones UNIQUE para identificar otras claves candidatas. En MySQL, una columna nullable con restricción UNIQUE puede admitir varios NULL cuando el motor de almacenamiento permite índices con valores nulos.
Crear una tabla con clave foránea
CREATE TABLE pedidos (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
cliente_id INT NOT NULL,
fecha DATETIME NOT NULL,
total DECIMAL(10, 2) NOT NULL,
CONSTRAINT fk_pedidos_cliente
FOREIGN KEY (cliente_id) REFERENCES clientes(id)
ON UPDATE CASCADE
ON DELETE RESTRICT
);cliente_id apunta a la columna id de la tabla clientes. Nombra las restricciones de forma explícita y elige las acciones ON UPDATE y ON DELETE según las reglas de tu dominio: no conviene copiarlas automáticamente de otro ejemplo.
Crear una tabla con índices
CREATE TABLE pedidos (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
cliente_id INT NOT NULL,
fecha DATETIME NOT NULL,
total DECIMAL(10, 2) NOT NULL,
INDEX idx_fecha (fecha),
INDEX idx_cliente (cliente_id),
FOREIGN KEY (cliente_id) REFERENCES clientes(id)
) ENGINE = InnoDB
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;Los índices mejoran determinadas búsquedas, relaciones y ordenaciones, pero también ocupan espacio y encarecen las escrituras. La guía sobre índices en MySQL explica cuándo crearlos y cómo comprobarlos con EXPLAIN.
Crear una tabla a partir de otra
Copiar solo la estructura:
CREATE TABLE clientes_backup LIKE clientes;Crear una tabla con el resultado de una consulta:
CREATE TABLE productos_sin_stock AS
SELECT id, nombre, precio
FROM productos
WHERE stock = 0;CREATE TABLE ... AS SELECT crea las columnas necesarias para el resultado y copia las filas seleccionadas, pero no debes entenderlo como una copia completa de las claves, índices y restricciones de la tabla original.
Recomendaciones
- Usa nombres claros y consistentes.
- Elige bien los tipos de datos desde el principio.
- Añade
PRIMARY KEYa cada tabla. - Usa
utf8mb4para soportar caracteres especiales y emojis. - Define las claves foráneas con reglas
ON UPDATEyON DELETEdeliberadas. - Crea índices justificados por consultas reales, solo en columnas que uses para buscar, ordenar o relacionar tablas.