外键约束(Foreign Key Constraint)是用于实现关系数据库中表之间的一致性的一种机制。它是一个字段或者一组字段,它可以引用另外一个表中的主键字段。外键约束可以保证数据库中的数据完整性,也就是说,如果在一个表中有一个外键,那么在另外一个表中必须有相应的主键值。
SQL 中使用 FOREIGN KEY 约束来定义外键。FOREIGN KEY 约束由 REFERENCES 子句创建,该子句包含了被引用表的名称和被引用列的名称。
CREATE TABLE Orders ( OrderID int NOT NULL, CustomerID int NOT NULL, OrderDate datetime, CONSTRAINT FK_Orders_Customers FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ) ;
上述代码创建了 Orders 表,并在 CustomerID 字段上创建了 FOREIGN KEY 约束,该字段引用 Customers 表中的 CustomerID 字段。这样就能保证 Orders 表中 CustomerID 字段所包含的值必须是 Customers 表中已有的 CustomerID 值。
FOREIGN KEY 约束还能帮助我们避免几乎所有不正当的数据写入问题。例如,如果我们想要将新订单写入 Orders 表时,但是在 Customers 表中不存在相应的客户信息时,FOREIGN KEY 约束会对此作出相应的反应并抛出异常。
一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。
让我们通过一个实例来解释外键。请看下面两个表:
"Persons" 表:
P_Id | LastName | FirstName | Address | City |
---|---|---|---|---|
1 | Hansen | Ola | Timoteivn 10 | Sandnes |
2 | Svendson | Tove | Borgvn 23 | Sandnes |
3 | Pettersen | Kari | Storgt 20 | Stavanger |
"Orders" 表:
O_Id | OrderNo | P_Id |
---|---|---|
1 | 77895 | 3 |
2 | 44678 | 3 |
3 | 22456 | 2 |
4 | 24562 | 1 |
请注意,"Orders" 表中的 "P_Id" 列指向 "Persons" 表中的 "P_Id" 列。
"Persons" 表中的 "P_Id" 列是 "Persons" 表中的 PRIMARY KEY。
"Orders" 表中的 "P_Id" 列是 "Orders" 表中的 FOREIGN KEY。
FOREIGN KEY 约束用于预防破坏表之间连接的行为。
FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。
下面的 SQL 在 "Orders" 表创建时在 "P_Id" 列上创建 FOREIGN KEY 约束:
MySQL:
SQL Server / Oracle / MS Access:
如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
当 "Orders" 表已被创建时,如需在 "P_Id" 列创建 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access:
如需命名 FOREIGN KEY 约束,并定义多个列的 FOREIGN KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
如需撤销 FOREIGN KEY 约束,请使用下面的 SQL:
MySQL:
SQL Server / Oracle / MS Access:
SQL 函数 SQL 拥有很多可用于计数和计算的内建函数。SQL Aggregate 函数 SQL Aggregate 函数计算从列中取得的值,返回一个单一的...
SQL UCASE() 函数UCASE() 函数 UCASE() 函数把字段的值转换为大写。 SQL UCASE() 语法SELECT UCASE(column_name) FROM table...
来自 W3CSchool 的 SQL 快速参考SQL 语句 语法 AND / OR SELECT column_name(s) FROM table_name WHERE condition AND|O...
如果我们需要修改或更新MySQL中的数据,我们可以使用 SQL UPDATE 命令来操作。.语法以下是 UPDATE 命令修改 MySQL 数据表数据的...
截取字符串用法:substr(string string,num start,num length);select substr(参数1,参数2,参数3) from 表名st...
MySQL中删除数据表是非常容易操作的, 但是你再进行删除表操作时要非常小心,因为执行删除命令后所有数据都会消失。 语法 以下为...
MySQL Date 函数定义和用法 NOW() 返回当前的日期和时间。 语法NOW()实例 下面是 SELECT 语句:SELECT NOW(),CURDATE(),CURTIME(...
MySQL Date 函数定义和用法 EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。 语法EXTRACT(unit F...