MySQL外键(foreign key)使用及说明详解

外键也称之为外键约束: foreign key

外键: 外面的键, 一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键.

外键所在的表称之为子表(附表); 外键所指向的主键所在的表称之为父表(主表)

一、增加外键
将一个表的字段与另外一张表的主键进行关联(实体与实体之间的联系)

增加外键有两种形式

方案1: 在创建表的时候就增加外键: 在表字段之后使用foreign key

foreign key(外键字段) references 主表(主键);

在这里插入图片描述
在这里插入图片描述
方案2: 在创建表之后增加外键: 指定外键名字

alter table 表名 add constraint 外键名 foreign key(外键字段) references 父表(主键字段)
在这里插入图片描述
查看指定的外键名
在这里插入图片描述
外键增加的基础条件: 外键字段必须与引用表(父表主键)的数据类型严格保持一致在这里插入图片描述
二、删除外键
外键不能被修改,只能先删除后新增.
alter table 表名 drop foreign key 外键名;
在这里插入图片描述
三、外键作用
外键也称之为外键约束: 主要作用在于对数据进行约束.

约束1: 外键对子表的数据写操作约束: (增加和更新): 如果子表中插入的数据所对应的外键在父表不存在: 不能成功.
在这里插入图片描述
约束2: 外键对父表也有数据约束: 当父表操作一个记录,但是该记录被子表所引用的时候,那么父表的操作将会被限制(更新: 主键和删除)
在这里插入图片描述
四、外键约束
外键约束: 可以通过在建立外键的时候, 对外键进行约束控制.

约束控制有三种模式

严格模式: district(默认的)
置空模式: set null,对子表的限制: 当父表删除一个被子表引用的记录的时候,会自动的将子表中对应的父表引用(外键)设置成NULL
级联模式: cascade, 级联操作: 当父表对一个被子表引用的数据进行操作的时候,会自动的连带更新子表对应的数据.(更新操作)
模式设定语法: 在外键增加之后(foreign key(外键字段) references 父表(主键)),增加on关键字, 指定操作方式和约束模式. 一个常用的约束模式如下
on update cascade – 级联操作: 父表更新,子表跟着变
on delete set null; – 父表删除, 子表置空
在这里插入图片描述
更新父表主键在这里插入图片描述
删除父表记录在这里插入图片描述
外键要增加成功的前提条件

子表的外键字段的数据类型必须与父表的主键的字段类型要一致
如果想要在父表进行数据删除的时候, 子表对应的模式为置空: set null,前提是子表对应的外键字段允许为空
如果是在表创建之后增加外键: 一定要考虑表中的数据是否满足外键条件

  • 9
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL 外键约束可以用来保证表与表之间的关系完整性。当我们在一个表中定义了一个外键,它会引用另一个表中的列,这个被引用的列必须是另一个表的主键或者是一个唯一键。在 MySQL 中,外键约束可以跨越多个列。 下面是一个例子,演示如何在 MySQL 中定义一个外键约束,跨越两个列: ``` CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id, order_date) REFERENCES customers(id, date) ); ``` 在这个例子中,orders 表中的 customer_id 和 order_date 列都被用来定义外键约束,它们分别引用了 customers 表中的 id 和 date 列。这个外键约束确保了 orders 表中的每一行都有对应的 customers 表中的行,而且这个关联是基于 customer_id 和 order_date 两列的值。 在定义外键约束时,我们还可以指定 ON DELETE 和 ON UPDATE 规则,用来控制当关联表中的某一行被删除或更新时,对应的行应该怎么处理。常用的规则包括: - CASCADE:当关联表中的某一行被删除或更新时,对应的行也会被删除或更新。 - RESTRICT:当关联表中的某一行被删除或更新时,如果该行有对应的行,则不允许删除或更新。 - SET NULL:当关联表中的某一行被删除或更新时,对应的行的外键列会被设置为 NULL。 我们可以在定义外键约束时使用这些规则,例如: ``` CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE, FOREIGN KEY (customer_id, order_date) REFERENCES customers(id, date) ON DELETE CASCADE ON UPDATE RESTRICT ); ``` 在这个例子中,我们指定了 ON DELETE CASCADE 和 ON UPDATE RESTRICT 规则,表示当 customers 表中的某一行被删除时,对应的 orders 表中的行也会被删除;当 customers 表中的某一行被更新时,只有当 orders 表中的行没有被引用时,才允许更新。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值