ALTER TABLE en SQL con restricciones PRIMARY KEY y FOREIGN KEY explicados

Imagen con código SQL que ilustra el uso de ALTER TABLE para definir una PRIMARY KEY en la columna id_pedido y una FOREIGN KEY en cliente_id que referencia a la tabla clientes(id_cliente).

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 clientesid_cliente es PRIMARY KEY.
  • Tabla pedidoscliente_id será FOREIGN KEY que apunta a clientes(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

ErrorCausaSolución
❌ Insertar valores duplicados en una PRIMARY KEYLa clave debe ser únicaRevisa y limpia los datos antes
❌ Insertar NULL en la PRIMARY KEYNo se permiten nulosAsegúrate de asignar un valor
❌ FOREIGN KEY apunta a un valor inexistenteNo existe en la tabla referenciadaInserta primero en la tabla padre
❌ Eliminar fila en tabla padre con registros en la hijaRestricción de integridad referencialUsa 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

  1. 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)
);
  1. 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);
  1. Agregamos FOREIGN KEY:
ALTER TABLE pedidos
ADD CONSTRAINT fk_pedidos_clientes
FOREIGN KEY (cliente_id)
REFERENCES clientes(id_cliente);

11) Buenas prácticas

  1. Siempre nombra las restricciones (pk_tabla, fk_tabla1_tabla2) para identificarlas fácilmente.
  2. Define PRIMARY KEY en todas las tablas: mejora integridad y rendimiento.
  3. Usa FOREIGN KEY para mantener la coherencia entre tablas.
  4. Antes de aplicar FOREIGN KEY en tablas grandes, revisa que los datos sean válidos.
  5. 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 TABLE podemos 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

Scroll al inicio