SQL 教程

SQL 教程 SQL 简介 SQL 语法 SQL Select SQL Select Distinct SQL Where SQL And, Or, Not SQL Order By SQL Insert Into SQL Null Values SQL Update SQL Delete SQL Select Top SQL Min 和 Max SQL Count, Avg, Sum SQL Like SQL 通配符 SQL In SQL Between SQL 别名 SQL 联接 SQL Inner Join SQL Left Join SQL Right Join SQL Full Join SQL 自联接 SQL Union SQL Group By SQL Having SQL Exists SQL Any, All SQL Select Into SQL Insert Into Select SQL Case SQL Null 函数 SQL 存储过程 SQL 注释 SQL 运算符

SQL 数据库

SQL 创建数据库 SQL 删除数据库 SQL 数据库备份 SQL Create Table SQL Drop Table SQL Alter Table SQL 约束 SQL Not Null SQL Unique SQL Primary Key SQL Foreign Key SQL Check SQL Default SQL Index SQL 自动增量 SQL 日期 SQL 视图 SQL 注入 SQL 托管 SQL 数据类型

SQL 参考手册

SQL 关键字 MySQL 函数 SQL Server 函数 MS Access 函数 SQL 快速参考手册

SQL 实例

SQL 实例 SQL 测验 SQL 练习


SQL FOREIGN KEY 约束

SQL FOREIGN KEY 约束

FOREIGN KEY 外键是用于将两个表链接在一起的键。

FOREIGN KEY 外键是一个表中引用另一个表中主键的字段(或字段集合)。

包含外键的表称为子表,包含候选键的表称为引用表或父表。

请看下面两个表:

"Persons" 表:

PersonID LastName FirstName Age
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20

"Orders" 表:

OrderID OrderNumber PersonID
1 77895 3
2 44678 3
3 22456 2
4 24562 1

请注意,"Orders" 表中的 "PersonID" 列指向 "Persons" 表中的 "PersonID" 列。

"Persons" 表中的 "PersonID" 列是 "Persons" 表中的主键。

"Orders" 表中的 "PersonID" 列是 "Orders" 表中的外键。

FOREIGN KEY 外键约束用于防止破坏表之间链接的操作。

FOREIGN KEY 外键约束还防止将无效数据插入外键列,因为它必须是它所指向的表中包含的值之一。



创建表时的 FOREIGN KEY 约束

下面的 SQL 在 "Orders" 表创建时在 "PersonID" 列创建 FOREIGN KEY 外键约束:

MySQL:

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

SQL Server / Oracle / MS Access:

CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);

如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

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)
);

修改表时的 FOREIGN KEY 约束

如果在表已存在的情况下为 "PersonID" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

如果需要命名 FOREIGN KEY 约束,以及为多个列定义 FOREIGN KEY 约束,请使用下面的 SQL 语法:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

撤销 FOREIGN KEY 约束

如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;