Saltar al contenido

Mentoring

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.

Mentoring 4 min de lectura

Actualizado el

Crear tablas en MySQL

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ónPara qué sirve
PRIMARY KEYIdentifica cada fila de forma única y crea el índice correspondiente.
AUTO_INCREMENTGenera un número automático sobre una columna entera indexada; solo puede haber una por tabla.
NOT NULLObliga a que la columna tenga valor.
UNIQUEImpide valores duplicados, aunque MySQL permite varios NULL.
DEFAULTDefine un valor por defecto.
FOREIGN KEYRelaciona 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 KEY a cada tabla.
  • Usa utf8mb4 para soportar caracteres especiales y emojis.
  • Define las claves foráneas con reglas ON UPDATE y ON DELETE deliberadas.
  • Crea índices justificados por consultas reales, solo en columnas que uses para buscar, ordenar o relacionar tablas.