前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >外键的设置

外键的设置

作者头像
诡途
发布2022-05-09 18:45:20
2.7K0
发布2022-05-09 18:45:20
举报
文章被收录于专栏:诡途的python路

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

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

一、外键的使用条件:

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

代码语言:javascript
复制
	#查看表类型
	SHOW TABLE STATUS
	#查询结果的Engine字段下,一般默认InnoDB类型

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

代码语言:javascript
复制
	#创建索引
	CREATE INDEX 字段1 ON test(字段1) 
	#对test2创建test的索引,在test2下执行,test2为从,test为主

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

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

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

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

代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档