MariaDB 关键字
MariaDB
FOREIGN KEY
关键字是一个约束,它用于将两个表链接在一起。外键由一个表中的单列或多列组成,该表引用另一表中的
主键
。包含外键的表称为子表。被引用的表称为被引用表或父表。
FOREIGN KEY 约束有助于保留两个表之间的链接。它可以防止在外键列中插入无效数据。可以插入到外键列中的值必须是引用表中包含的值。
考虑一个包含名为 Employee 和 Contact_Info 表的数据库> 包含以下记录:
表 1:
Employee
表
EmpID
|
Name
|
City
|
Age
|
Salary
|
1
|
John
|
London
|
25
|
3000
|
2
|
Marry
|
New York
|
24
|
2750
|
3
|
Jo
|
Paris
|
27
|
2800
|
4
|
Kim
|
Amsterdam
|
30
|
3100
|
表 2:
Contact_Info 表
Phone_Number
|
EmpID
|
PersonName
|
Address
|
+1-8054098000
|
2
|
Marry
|
Brooklyn, New York, USA
|
+33-147996101
|
3
|
Jo
|
Grenelle, Paris, France
|
+31-201150319
|
4
|
Kim
|
Geuzenveld, Amsterdam, Netherlands
|
Employee 表中的 EmpID 列是 PRIMARY KEY在 Employee 表中。 Contact_Info 表中的 EmpID 列是 Contact_Info 表中的外键。
MariaDB CREATE TABLE FOREIGN KEY 约束
下面提到的语句创建 Contact_Info 表,并将 FOREIGN KEY 约束应用于列 EmpID。
CREATE TABLE Contact_Info (
Phone_Number VARCHAR(100),
EmpID INT NOT NULL,
PersonName VARCHAR(255),
Address VARCHAR(255),
FOREIGN KEY (EmpID) REFERENCES Employee(EmpID)
要为 FOREIGN KEY 约束提供名称,并在多个列上定义 FOREIGN KEY 约束,语句如下:
CREATE TABLE Contact_Info (
Phone_Number VARCHAR(100),
EmpID INT NOT NULL,
PersonName VARCHAR(255),
Address VARCHAR(255),
CONSTRAINT FK_Contact_Info FOREIGN KEY (EmpID)
REFERENCES Employee(EmpID)
下面给出的语句演示了如何应用 FOREIGN KEY 约束多列(EmpID 和 PersonName)。请注意,Employee 表必须对这些列有 PRIMARY KEY 约束 - EmpID 和 Name。
CREATE TABLE Contact_Info (
Phone_Number VARCHAR(100),
EmpID INT NOT NULL,
PersonName VARCHAR(255),
Address VARCHAR(255),
CONSTRAINT FK_Contact_Info FOREIGN KEY (EmpID, PersonName)
REFERENCES Employee(EmpID, Name)
MariaDB ALTER TABLE FOREIGN KEY 约束
在上面的示例中,创建了一个名为 Contact_Info 的表。要对 EmpID 列强制执行 FOREIGN KEY 约束,语句如下:
ALTER TABLE Contact_Info
ADD FOREIGN KEY (EmpID)
REFERENCES Employee(EmpID);
为 FOREIGN KEY 约束提供名称,并定义 FOREIGN KEY 约束对于多列,语句如下:
ALTER TABLE Contact_Info
ADD CONSTRAINT FK_Contact_Info
FOREIGN KEY (EmpID)
REFERENCES Employee(EmpID);
下面给出的语句演示了如何对多列(EmpID 和 人名)。请注意,Employee 表必须对这些列有 PRIMARY KEY 约束 - EmpID 和 Name。
ALTER TABLE Contact_Info
ADD CONSTRAINT FK_Contact_Info
FOREIGN KEY (EmpID, PersonName)
REFERENCES Employee(EmpID, Name);
删除 FOREIGN KEY 约束
要从名为 Contact_Info 的表中删除 FK_Contact_Info FOREIGN KEY 约束,语句如下:
ALTER TABLE Contact_Info
DROP FOREIGN KEY FK_Contact_Info;
ALTER TABLE Contact_Info
DROP CONSTRAINT FK_Contact_Info;