Restricción de clave externa de MySQL
Restricción de clave externa de MySQL
La FOREIGN KEY
restricción se utiliza para evitar acciones que destruirían enlaces entre tablas.
A FOREIGN KEY
es un campo (o colección de campos) en una tabla, que se refiere a PRIMARY KEY
en otra tabla.
La tabla con la clave externa se denomina tabla secundaria, y la tabla con la clave principal se denomina tabla principal o de referencia.
Mira las dos tablas siguientes:
Tabla de personas
PersonID | LastName | FirstName | Age |
---|---|---|---|
1 | Hansen | Ola | 30 |
2 | Svendson | Tove | 23 |
3 | Pettersen | Kari | 20 |
Tabla de pedidos
OrderID | OrderNumber | PersonID |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
Observe que la columna "PersonID" en la tabla "Pedidos" apunta a la columna "PersonID" en la tabla "Personas".
La columna "PersonID" en la tabla "Personas" es la PRIMARY KEY
de la tabla "Personas".
La columna "PersonID" en la tabla "Pedidos" es una
FOREIGN KEY
en la tabla "Pedidos".
La FOREIGN KEY
restricción evita que se inserten datos no válidos en la columna de clave externa, porque tiene que ser uno de los valores contenidos en la tabla principal.
CLAVE EXTRANJERA en CREAR TABLA
El siguiente SQL crea un FOREIGN KEY
en la columna "PersonID" cuando se crea la tabla "Pedidos":
CREATE TABLE Orders
(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
Para permitir nombrar una FOREIGN KEY
restricción y definir una
FOREIGN KEY
restricción en varias columnas, use la siguiente sintaxis SQL:
CREATE TABLE Orders
(
OrderID int NOT NULL,
OrderNumber int NOT NULL,
PersonID int,
PRIMARY KEY (OrderID),
CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID)
);
CLAVE EXTRANJERA en ALTER TABLE
Para crear una FOREIGN KEY
restricción en la columna "PersonID" cuando la tabla "Pedidos" ya está creada, use el siguiente SQL:
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
Para permitir nombrar una FOREIGN KEY
restricción y definir una
FOREIGN KEY
restricción en varias columnas, use la siguiente sintaxis SQL:
ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID)
REFERENCES Persons(PersonID);
DROP una restricción FOREIGN KEY
Para descartar una FOREIGN KEY
restricción, use el siguiente SQL:
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;