Cuando diseñamos bases de datos relacionales, no basta con definir tablas y columnas: también debemos establecer restricciones que garanticen la calidad y coherencia de los datos.
Dos de las restricciones más importantes son:
- PRIMARY KEY (clave primaria) → garantiza que cada fila sea única.
- FOREIGN KEY (clave foránea) → asegura la relación entre tablas.
En este artículo aprenderás, paso a paso, cómo usar ALTER TABLE para añadir, modificar y eliminar PRIMARY KEY y FOREIGN KEY en SQL. Está escrito de manera simple, con ejemplos prácticos, para que incluso un principiante pueda entenderlo.
1) ¿Qué es ALTER TABLE?
El comando ALTER TABLE en SQL permite modificar la estructura de una tabla ya existente.
Con él podemos:
- Agregar o eliminar columnas.
- Cambiar tipos de datos.
- Renombrar columnas o tablas.
- Añadir o quitar restricciones como PRIMARY KEY o FOREIGN KEY.
👉 En este artículo nos centraremos en las restricciones.
🔗 Lectura recomendada: ALTER TABLE
2) ¿Qué es PRIMARY KEY?
Una PRIMARY KEY o clave primaria:
- Identifica de forma única cada fila en una tabla.
- No permite valores repetidos.
- No permite valores
NULL. - Puede ser una sola columna o una combinación de varias (clave compuesta).
Ejemplo de tabla con PRIMARY KEY en la creación:
CREATE TABLE clientes (
id INT PRIMARY KEY,
nombre VARCHAR(100),
email VARCHAR(255)
);
Pero ¿qué pasa si olvidamos definir la PRIMARY KEY al crear la tabla? 👉 Podemos agregarla luego con ALTER TABLE.
🔗 Lectura recomendada: PRIMARY KEY
3) Agregar PRIMARY KEY con ALTER TABLE
Supongamos que tenemos esta tabla sin clave primaria:
CREATE TABLE productos (
codigo INT,
nombre VARCHAR(100),
precio DECIMAL(10,2)
);
Agregar clave primaria en una sola columna
ALTER TABLE productos
ADD CONSTRAINT pk_productos PRIMARY KEY (codigo);
👉 Ahora la columna codigo será única y no podrá ser nula.
Agregar clave primaria compuesta
Podemos usar más de una columna, por ejemplo codigo + nombre:
ALTER TABLE productos
ADD CONSTRAINT pk_productos PRIMARY KEY (codigo, nombre);
Esto asegura que no existan dos filas con la misma combinación de codigo y nombre.
4) Eliminar PRIMARY KEY con ALTER TABLE
Si necesitamos quitar una clave primaria:
- En MySQL/MariaDB:
ALTER TABLE productos
DROP PRIMARY KEY;
- En PostgreSQL:
ALTER TABLE productos
DROP CONSTRAINT pk_productos;
- En SQL Server:
ALTER TABLE productos
DROP CONSTRAINT pk_productos;
5) ¿Qué es FOREIGN KEY?
Una FOREIGN KEY o clave foránea conecta una columna de una tabla con la PRIMARY KEY de otra tabla.
Sirve para mantener la integridad referencial, asegurando que los datos estén relacionados correctamente.
Ejemplo:
- Tabla
clientes→id_clientees PRIMARY KEY. - Tabla
pedidos→cliente_idserá FOREIGN KEY que apunta aclientes(id_cliente).
Esto evita que en pedidos se registren IDs de clientes inexistentes.
🔗 Lectura recomendada: FOREIGN KEY
6) Agregar FOREIGN KEY con ALTER TABLE
Supongamos que tenemos las tablas:
CREATE TABLE clientes (
id_cliente INT PRIMARY KEY,
nombre VARCHAR(100)
);
CREATE TABLE pedidos (
id_pedido INT PRIMARY KEY,
cliente_id INT,
total DECIMAL(10,2)
);
Queremos que cliente_id en pedidos apunte a id_cliente en clientes.
ALTER TABLE pedidos
ADD CONSTRAINT fk_pedidos_clientes
FOREIGN KEY (cliente_id)
REFERENCES clientes(id_cliente);
👉 Ahora la base de datos no permitirá insertar un pedido con un cliente que no exista en clientes.
7) Eliminar FOREIGN KEY con ALTER TABLE
Si necesitamos quitar la relación:
- En MySQL/MariaDB:
ALTER TABLE pedidos
DROP FOREIGN KEY fk_pedidos_clientes;
- En PostgreSQL/SQL Server:
ALTER TABLE pedidos
DROP CONSTRAINT fk_pedidos_clientes;
8) Errores comunes con PRIMARY KEY y FOREIGN KEY
| Error | Causa | Solución |
|---|---|---|
| ❌ Insertar valores duplicados en una PRIMARY KEY | La clave debe ser única | Revisa y limpia los datos antes |
❌ Insertar NULL en la PRIMARY KEY | No se permiten nulos | Asegúrate de asignar un valor |
| ❌ FOREIGN KEY apunta a un valor inexistente | No existe en la tabla referenciada | Inserta primero en la tabla padre |
| ❌ Eliminar fila en tabla padre con registros en la hija | Restricción de integridad referencial | Usa ON DELETE CASCADE si quieres borrado en cascada |
9) Opciones avanzadas en FOREIGN KEY
Cuando definimos una FOREIGN KEY, podemos indicar qué hacer al eliminar o actualizar datos en la tabla padre:
ALTER TABLE pedidos
ADD CONSTRAINT fk_pedidos_clientes
FOREIGN KEY (cliente_id)
REFERENCES clientes(id_cliente)
ON DELETE CASCADE
ON UPDATE CASCADE;
- ON DELETE CASCADE → si eliminas un cliente, también se eliminan sus pedidos.
- ON UPDATE CASCADE → si cambias el id del cliente, se actualiza en pedidos.
⚠️ Estas opciones deben usarse con cuidado, ya que pueden borrar o actualizar muchos registros de forma automática.
10) Ejemplo completo
- Creamos las tablas:
CREATE TABLE clientes (
id_cliente INT,
nombre VARCHAR(100)
);
CREATE TABLE pedidos (
id_pedido INT,
cliente_id INT,
total DECIMAL(10,2)
);
- Agregamos PRIMARY KEY:
ALTER TABLE clientes
ADD CONSTRAINT pk_clientes PRIMARY KEY (id_cliente);
ALTER TABLE pedidos
ADD CONSTRAINT pk_pedidos PRIMARY KEY (id_pedido);
- Agregamos FOREIGN KEY:
ALTER TABLE pedidos
ADD CONSTRAINT fk_pedidos_clientes
FOREIGN KEY (cliente_id)
REFERENCES clientes(id_cliente);
11) Buenas prácticas
- Siempre nombra las restricciones (
pk_tabla,fk_tabla1_tabla2) para identificarlas fácilmente. - Define PRIMARY KEY en todas las tablas: mejora integridad y rendimiento.
- Usa FOREIGN KEY para mantener la coherencia entre tablas.
- Antes de aplicar FOREIGN KEY en tablas grandes, revisa que los datos sean válidos.
- Evita PRIMARY KEY compuestas muy largas: pueden afectar rendimiento.
12) Cierre
- PRIMARY KEY asegura unicidad en cada tabla.
- FOREIGN KEY mantiene la coherencia entre tablas relacionadas.
- Con
ALTER TABLEpodemos añadir o eliminar estas restricciones en cualquier momento. - Es fundamental comprender cómo afectan al rendimiento y a la integridad de los datos.
👉 Usar correctamente estas restricciones es la base para tener bases de datos relacionales seguras, coherentes y confiables.
📚 Artículos relacionados
- Cómo modificar la estructura de una tabla en SQL con ALTER TABLE paso a paso
Guía completa para principiantes donde aprenderás a usar ALTER TABLE para agregar, eliminar o modificar columnas y restricciones de manera segura. - Diferencia entre ALTER TABLE ADD COLUMN y ALTER TABLE MODIFY COLUMN en SQL
Explicación clara y práctica sobre las diferencias entre agregar nuevas columnas y modificar columnas existentes, con ejemplos en distintos motores de bases de datos. - Cómo usar ALTER TABLE DROP COLUMN en SQL con ejemplos prácticos
Ejemplos detallados que muestran cómo eliminar columnas de una tabla, sus efectos en los datos existentes y las buenas prácticas para evitar errores. - Renombrar columnas y tablas en SQL con ALTER TABLE RENAME
Paso a paso para cambiar nombres de tablas y columnas, incluyendo compatibilidad entre MySQL, PostgreSQL, SQL Server y Oracle. - Impacto en el rendimiento al usar ALTER TABLE en tablas grandes
Explicación del impacto en el rendimiento de ALTER TABLE cuando se aplica en tablas con millones de registros, y estrategias para minimizar demoras.
