mysql笔记(12)-外键约束的添加和删除

本文将简单介绍外键的作用,添加/删除外键的方式,以及on update从句的使用

一、外键的定义和作用

1、定义

若有关系表R和S,对于R中的属性A,A的任何值都来源于S中的属性B的值,且B具有UNIQUE约束,则A被称为R的外键

2、作用

(1) 能预防破坏表之间连接的行为
(2) 能防止非法数据插入外键所在的列,因为它必须是它指向的那个表中的值之一

二、添加外键约束

1、在建表时添加
create table table_name{
xxx xxx xxx,
xxx xxx xxx,
xxx xxx xxx,
FOREIGN KEY(column_name) references table_name(column_name);

在建表语句的最后一句指明外键所在的列,并指明它指向哪个表的哪个属性

2、表结构已存在时添加
alter table table_name
add FOREIGN KEY(column_name) 
references table_name(clolumn name);

三、删除外键约束

需要先通过查看建表语句来获取外键约束的id

show create table table_name \G;

例如 查看student表中外键dept_name的外键id
12-1.png
然后再使用 alter+drop 语句来删除外键

alter table student
drop FOREIGN KEY student_ibfk_1;

四、on update 从句

在添加外键约束时,可以在语句末尾添加 on update 从句
从而指定 当被参照列的数据发生更新时 参照列所进行的动作
跟在 on update 后的可选动作有4种:
no action、cascade、set null、set default

下面用具体的例子来说明:
假设有关系表R和S,R中有外键A,参照S中的属性B
(1) no action (不写on update从句时默认采用的动作)
当B的某个值被更新时,检查表R的A列中是否有对应的值
如果有,则发出报错,不允许被更新
(2) cascade
当B的某个值被更新时,检查表R的A列中是否有对应的值
如果有,则同时更新A列中的那个值
(3) set null
当B的某个值被更新时,检查表R的A列中是否有对应的值
如果有,则将A列中的对应值设为空
(4) set default
当B的某个值被跟新时,检查表R的A列中是否有对应的值
如果有,则将A列中的对应值改为事先设定的默认值

猜你喜欢

转载自www.cnblogs.com/baebae996/p/12943059.html