MariaDB FOREIGN KEY 约束用于将两个表链接在一起。外键由一个表中的单列或多列组成,该表引用另一表中的 主键。包含外键的表称为子表。被引用的表称为被引用表或父表。

FOREIGN KEY 约束有助于保留两个表之间的链接。它可以防止在外键列中插入无效数据。可以插入到外键列中的值必须是引用表中包含的值。

考虑一个包含名为 Employee 和 Contact_Info 表的数据库包含以下记录:

表 1:Employee 

EmpIDNameCityAgeSalary
1JohnLondon253000
2MarryNew York242750
3JoParis272800
4KimAmsterdam303100

表 2: Contact_Info 表

Phone_NumberEmpIDPersonNameAddress
+1-80540980002MarryBrooklyn, New York, USA
+33-1479961013JoGrenelle, Paris, France
+31-2011503194KimGeuzenveld, 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 和 Name)进行外键约束。请注意,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;