外键的设置

关键词:外键 | 索引 | InNoDB和MyISAM | 引用 | Mysql

设置外键的目的:保证数据的一致性!

一、外键的使用条件:

① 两个表必须是InnoDB表,MyISAM表暂时不支持外键

	#查看表类型
	SHOW TABLE STATUS
	#查询结果的Engine字段下,一般默认InnoDB类型

② 外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立;

	#创建索引
	CREATE INDEX 字段1 ON test(字段1) 
	#对test2创建test的索引,在test2下执行,test2为从,test为主

这一步也是博主自己刚开始研究是碰到的最大的坑,

外键引用一直选不了对应字段,可能是你没有设置索引

③ 外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

二、设置外键
1、SQL代码设置

ALTER TABLE test2 
ADD xxx    #约束名  自己起
FOREIGN KEY test(字段2) #外键
REFERENCES test2(字段2) #约束表字段
ON DELETE CASCADE  #父表删除子表更新方式
ON UPDATE CASCADE; #父表更新子表更新方式

2、可视化界面设置

选中表—》关/系/外键 | F10 ——》外部键
在这里插入图片描述
约束名自动生成不用管,重点是后面的更新和删除关键字
在这里插入图片描述

三、相关关键字含义

外键约束(表2)对父表(表1)的含义:
在父表上进行update/delete以更新或删除在子表中有一条或多条对应匹配行的候选键时,父表的行为取决于:在定义子表的外键时指定的on update/on delete子句。

关键字 含义
CASCADE 删除包含与已删除键值有参照关系的所有记录
SET NULL 修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段)
RESTRICT 拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置)
NO ACTION 啥也不做

四、外键约束使用最多的两种情况:

场景 关键字选择
①父表更新时子表也更新,父表删除时如果子表有匹配的项,删除失败; ON UPDATE CASCADE ON DELETE RESTRICT;
②父表更新时子表也更新,父表删除时子表匹配的项也删除。 ON UPDATE CASCADE ON DELETE CASCADE;

更多知识链接:
1、外键详解知识点:
https://www.cnblogs.com/microtiger/p/7814177.html

2、两表关联更新操作:
https://blog.csdn.net/qq_35866846/article/details/102798941

发布了35 篇原创文章 · 获赞 35 · 访问量 2610

猜你喜欢

转载自blog.csdn.net/qq_35866846/article/details/102795374
今日推荐