SQL FOREIGN KEY 约束

一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY。

让我们通过一个例子来解释外键。请看下面两个表:

"Persons" 表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1

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

"Persons" 表中的 "Id_P" 列是 "Persons" 表中的 PRIMARY KEY。

"Orders" 表中的 "Id_P" 列是 "Orders" 表中的 FOREIGN KEY。

FOREIGN KEY 约束用于预防破坏表之间连接的动作。

FOREIGN KEY 约束也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。

SQL FOREIGN KEY Constraint on CREATE TABLE

下面的 SQL 在 "Orders" 表创建时为 "Id_P" 列创建 FOREIGN KEY:

MySQL:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (O_Id),
FOREIGN KEY (Id_P) REFERENCES Persons(Id_P)
)

SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
Id_P int FOREIGN KEY REFERENCES Persons(Id_P)
)

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

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
Id_P int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)
)

SQL FOREIGN KEY Constraint on ALTER TABLE

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

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)

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

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (Id_P)
REFERENCES Persons(Id_P)

撤销 FOREIGN KEY 约束

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

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
以上来源于:http://www.w3school.com.cn/sql/sql_foreignkey.asp
以下是本人的一个实验例子
CREATE TABLE a
(
ID varchar(36) NOT NULL PRIMARY KEY
)

CREATE TABLE b
(
ID varchar(36) NOT NULL PRIMARY KEY
)

CREATE TABLE a_b
(
ID varchar(36) NOT NULL PRIMARY KEY,
aID varchar(36),
bID varchar(36),
FOREIGN KEY (aID) REFERENCES a(ID),
foreign key (bID) references b(ID)
ON DELETE NO ACTION
ON UPDATE NO ACTION/*还可接CASCADE,SET NULL,SET DEFAULT*/
)
NO ACTION:表示不执行任何操作,当删除主键表中数据时,如果外键表中有相应的数据,则主键表中的删除操作 失败,该选项为默认选项。
CASCADE : 表示级联操作,当删除主键表中数据时,外键表中相应的数据会被自动删除
SET NULL: 执行级联操作,并且将外键表中的所有数据都设置为空值。
SET DEFAULT :与SET NULL类似,外刍表中数据都设置为默认值。
以下说说什么主键表和什么是外键表:
如上面的例子:
aID是表a_b的外键,而且是表a的主键,那么对于aID来说表a就是主键表,表a_b就是外键表


外键约束的创建及例子相关推荐

  1. 【例子】外键约束的创建及例子

    SQL FOREIGN KEY 约束 一个表中的 FOREIGN KEY 指向另一个表中的 PRIMARY KEY. 让我们通过一个例子来解释外键.请看下面两个表: "Persons&quo ...

  2. Mysql外键约束的创建与删除

    在Mysql中使用外键,可以有效地将多个表格的数据"联动"起来,打破独立状态,互相影响. 文章目录 创建表时创建外键 给存在的表添加外键 删除外键约束 创建表时创建外键 创建两个表 ...

  3. 使用mysql创建外键约束_Mysql创建外键约束的两种方式

    通过给mysql的表字段添加外键约束,可以有效的保持数据的一致性和完整性,数据就不会很容易出问题. 1.创建表时直接创建外键约束create table books( bookid number(10 ...

  4. MySQL外键约束(FOREIGN KEY)是什么?

    向导 外键约束 外键创建规则 创建外键约束语法 外键约束创建 修改创建外键约束 删除外键 完整格式创建 外键约束 MySQL的外键约束用来在两个表数据之间建立链接,其中一张表的一个字段被另一张表中对应 ...

  5. Oracle 如何设置外键约束

    表中的外键就是对于该属性所对应的域的限制,对于插入到表中的该属性的数据进行约束.并且该外键映射于所对应的另一张表的能唯一标识每一条数据的主键,根据参照完整性规则,外键可以取空值或者取对应主键的数值.外 ...

  6. MySQL多表操作的外键约束

    目录 一.多表关系 一对一关系 一对多/多对一关系 多对多关系 二.外键约束 特点 创建外键约束 方式1-在创建表时设置外键约束 方式2-在创建表时设置外键约束 在外键约束下的操作 1.数据插入 2. ...

  7. oracle外键约束的总结

    外键约束的创建方法tes1的建表语句为create table test1 (hid number primary key,hname varchar2(10)); 1.创建表的同时创建外键约束 1. ...

  8. mysql中的外键约束_MySQL外键约束

    在本教程中,您将了解MySQL外键(foreign key)以及如何在MySQL中创建,添加和删除外键约束. MySQL外键简介 外键表示一个表中的一个字段被另一个表中的一个字段引用.外键对相关表中的 ...

  9. MySQL外键约束要求与参照操作

    文章目录 约束 FOREIGN KEY 外键约束 如何编辑数据表的默认存储引擎 外键约束的创建 外键约束的参照操作 表级约束和列级约束 约束 1.约束是为了保证数据的完整性和一致性 2.约束分为表级约 ...

最新文章

  1. 微信小程序 java 传值_微信小程序传值获取值的实例方法
  2. matlab optimvar
  3. fibonacci数列前20项_等差数列、等比数列、调和数列等几种常见数列的总结
  4. iOS中使用OpenGL 实现增高功能
  5. RabbitMQ,Springboot整合RabbitMQ实现 消息可靠性投递,Consumer ACK,TTL,死信队列,使用TTL+死信队列=延迟队列
  6. phpnow 安装apache失败_PHPnow安装服务[apache_pn]失败的问题的解决方法
  7. 《An Introduction to Ray Tracing》——2.2 Ray/Sphere Intersection And Mapping
  8. 值得收藏!中国金融体系主要指标大全
  9. (3)二进制文件方式部署Kubernetes高可用集群----------创建TLS证书和秘钥
  10. php 如何去除说有空格,php怎么去除所有空格
  11. 《图论及其应用》学习笔记(匹配和因子分解)
  12. odin学习3之numbers
  13. element-this.$confirm确定-取消位置交换
  14. 软工学子带你一起学习工程经济学!献上与工作相关的实用公式(值得一进)
  15. DM368开发 -- 再论 UBL
  16. 每日一题:42. 接雨水
  17. 2018.10.31-dtoj-4015-永琳的竹林迷径(path)
  18. 世界级3D渲染大赛TOP3大佬们的制作流程大揭秘!
  19. 防住CV中这颗“不定时炸弹”,有哪些捷径?丨独家公开课实录(4)
  20. 多周期CPU设计(verilog)

热门文章

  1. CARLA自动驾驶模拟器操作
  2. 特岗教师计算机专业面试题,2019特岗教师面试试题及参考答案
  3. Java实现word、excel、ppt转pdf文件,pdf转图片(无水印)
  4. 前美图技术总裁洪小军入职AfterShip 担当CTO助力全球电商服务平台
  5. 证明DES解密算法实际上是DES加密算法的逆
  6. 深度优先搜索(Depth First Search)、广度优先搜索(Breadth First Search)
  7. 开发常用图标png、ico 图标下载
  8. CES Asian 2018 见闻
  9. JAVASE IO流,文字不多,代码为主,自学用,谨慎借鉴,有错误请指正
  10. 阵阵的挫败感,让我痛苦迷茫