Mysql基础(五)外键约束

一  外键

激励: 每天进步'一点点'即可

①  思考

1、在MySQL中,我们知道'主键 PRIMARY KEY'的主要作用是'唯一'区分表中的各个'行 [记录]';思考:但是对于'外键 foreign key'比较陌生?  那么外键'作用'以及'限制'条件和'目的'呢?

②  外键的定义

1、外键是'某个表 A'中的'一列 column',它包含在'另一个表 B'的'主键'中2、外键也是'索引'的一种,是通过'一张表中的一列'指向'另一张表中的主键',来对两张表进行'关联'3、一张表可以'有一个'外键,也可以存在'多个外键',与'多张表'进行关联

③  外键的定义

1、外键的'主要作用': 保证数据的'一致性'和'完整性',并且减少数据冗余2、主要体现在以下'两个'方面:(1) 阻止执行从表'插入'新行,其'外键值'不是主表的主键值,便阻止插入从表'修改'外键值,新值不是主表的主键值便'阻止'修改主表'删除'行,其主键值'在从表里存在'便阻止删除(要想删除,必须'先删除从表'的相关行)主表'修改'主键值,旧值在'从表里存在'便阻止修改(要想修改,必须'先删除从表'的相关行)(2) '级联 cascade'执行主表'删除'行,连带从表的相关行'一起删除'主表'修改'主键值,连带从表相关行的'外键值'一起修改遗留: 关于'主表'和'从表'的概念,一会'通过'案例讲解思考: 什么是'外键约束'?

④  外键创建限制

1、'父表'必须'已经存在'于数据库中,或者是当前正在创建的表。如果是后一种情况,则父表与子表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。2、必须为'父表'定义'主键'3、外键中'列的数目'必须和父表的主键中'列的数目'相同4、两张表必须'是 InnoDB 表',MyISAM 表暂时'不支持'外键备注: 并且它们'没有临时表'5、外键列必须'建立了索引',MySQL 4.1.2+ 以后的版本在'建立外键时'会'自动'创建索引6、外键关系的'两个表的列'必须是'数据类型相似',也就是可以'相互转换类型'的'列'比如: int 和tinyint 可以,而 int 和 char 则'不可以'

四种方式指定外键

⑤  外键创建1

1、在'已有的表'中增加'外键'内容来源: help alter table \Gsynax '语法':ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名)
REFERENCES 外表表名(主键字段名)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

重点: 'on delete' | 'on update' 的理解通俗: 'A 表 [主表]'的 'id [主键]' 是 'B 表 [从表]' 外键一、on delete1. on delete cascade: 删除 A 表的数据时,对应 B 表的数据也会'极联删除'2. on delete set null:删除 A 表的数据时,对应 B 表的'外键字段'置为'空'备注: 前提是该字段可以为'空'如果添加外键时'没加上面内容',删除 A 表的数据时,如果对应 B 表有数据就会报错二、on update1. on update cascade: '更新' A 表数据的 id 时,对应 B 表的外键字段也会更新2. on update set null:'更新' A 表数据的 id 时,对应 B 表的外键字段置为空备注: 前提是该字段可以为'空'如果添加外键时'没加'上面内容,'更新 A 表的 id',如果对应 B 表有数据'就会报错'三、添加'外键'语句建表'以后'添加外键:语法:alter table 表名称 add foreign key (列名称) references 关联表名称(列名称);alter table user add constraint '自定义约束名' foreign key (role_id) \references role(id) on delete cascade on update cascade;

⑥  外键创建2

1、在'创建表'时创建'外键'[1]、创建'主表'CREATE TABLE student
(id int (11) primary key auto_increment,       //'主键'name char(255),sex char(255),age int(11)
) charset utf8;[2]、创建'从表'CREATE TABLE student_score
(id int (11) primary key auto_increment,class char(255),score char(255),student_id int(11),                             //实际'外键'foreign	key (student_id) REFERENCES student(id) //从表'外键'与主表'主键'关联 
) charset utf8;说明: 默认 'ENGINE=InnoDB'2、查看'表结构'SHOW CREATE TABLE student_score;

说明: 下面基于上述'主表和从表'验证外键作用

⑦  触发限制使用默认值 RESTRICT 的情况下

1、数据'初始化'  --> 注意'先后'顺序[1]、先向'主表'中添加'数据'[2]、再向'从表'中添加'数据'现象: 数据'插入'正常,'无报错'、'警告'信息说明: 以下'相关测试'是在说明'外键约束'

2、'从表' insert 插入'新行',外键值'不在'主表中,'被阻止'INSERT INTO student_score (class, score, student_id) VALUES('语文', '100', 2);通俗理解: 不能'引用'不存在的东西现象: '从表'插入数据'报错'错误: Cannot add or update a child row: a foreign key constraint fails

3、'从表' update 修改'外键值','新值'不是'主表的主键值',阻止修改测试语句: UPDATE student_score SET student_id = 2 WHERE student_id = 1;通俗理解: 不能'引用'不存在的东西提示: 要想删除,必须'先删除从表'的'相关行'现象: 修改'从表'数据'报错'错误: Cannot add or update a child row: a foreign key constraint fails

4、主表 delete '删除行',其'主键值'在'从表'里,存在便阻止删除通俗理解: 不能删除'还在引用'的东西提示: 要想删除,必须'先删除'从表的'相关行'

5、主表 update 修改'主键值','旧值'在'从表'里存在,便'阻止'修改通俗理解: 不能修改'还在引用'的东西提示:要想'修改',必须'先删除从表'的'相关行[引用该旧值]'

⑧  更改事件触发限制CASCADE

1、'初始化'[1]、删除'旧的外键'ALTER TABLE 表名称 DROP FOREIGN KEY 外键名;[2]、添加'新的外键',修改事件'触发限制'为 CASCADEALTER TABLE student_score ADD CONSTRAINT s_id FOREIGN KEY (student_id) REFERENCES student (id) ON DELETE CASCADE ON UPDATE CASCADE;

2、此时当'主表'修改'主键值','从表'中'相关行的外键值'将'一起级联修改'

3、如果'主表删除行',从表中的'相关行'将一起被删除说明: 在'前面'的基础上继续操作好处: 避免有'脏数据'残留

⑨  小结

事件触发'限制条件'的不同,会造成两张表中的'操作限制'不同默认是: ON DELETE RESTRICT  ON UPDATE RESTRICT;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/8546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像处理之SVD检测显示屏缺陷(C++)

图像处理之SVD检测显示屏缺陷(C) 文章目录 图像处理之SVD检测显示屏缺陷(C)前言一、SVD算法简介二、代码实现总结 前言 显示屏缺陷检测是机器视觉领域的一处较广泛的应用场景,显示屏主要有LCD和OLED,缺陷类…

基于java,SpringBoot和Vue的智慧校园在线考试留言讨论系统设计

摘要 基于Java, SpringBoot和Vue的智慧校园在线考试留言讨论系统是一个为现代教育需求定制的Web应用,它结合了最新的前后端技术来提供一个互动性强、用户友好的学习和交流平台。该系统旨在通过提供实时留言和讨论功能,增进学生间的互动以及师生之间的沟…

快来看 2024年ICLR杰出论文奖揭晓啦 值得关注

会议之眼 快讯 在人工智能的浪潮中,国际学习表征会议(ICLR)无疑是引领学术前沿的重要会议之一!ICLR是深度学习领域的顶级会议之一,由深度学习领域的两位巨头Yoshua Bengio和Yann LeCun于2013年创办。 2024年5月6日&a…

NSSCTF中的web

目录 [第五空间 2021]WebFTP [LitCTF 2023]PHP是世界上最好的语言!! [SWPUCTF 2021 新生赛]PseudoProtocols [LitCTF 2023]导弹迷踪 [NISACTF 2022]easyssrf [第五空间 2021]WebFTP 1.进入页面,发现是登录页面,想到 弱口令&…

大模型微调之 在亚马逊AWS上实战LlaMA案例(六)

大模型微调之 在亚马逊AWS上实战LlaMA案例(六) 通过 SageMaker Python SDK 进行微调Llama2 可以使用 SageMaker Python SDK 微调 Llama 2 模型。以下是在数据集上微调 Llama 2 7B 的示例代码: import os import boto3 from sagemaker.sessi…

28 JavaScript学习: 代码规范

代码规范通常包括以下几个方面: 变量和函数的命名规则空格,缩进,注释的使用规则。其他常用规范…… 变量名 在编写JavaScript代码时,遵守良好的变量命名规范是非常重要的,这可以增加代码的可读性和可维护性。以下是一些常见的…

iOS ------ 内存五大分区

1,内存的概念: 虚拟内存(Virtual Memory):虚拟内存是操作系统提供的一种机制,它使得应用程序能够访问超出物理内存限制的内存空间。虚拟内存将应用程序的内存地址空间分割成固定大小的页面(Pag…

路由策略与路由控制

1.路由控制工具 匹配工具1:访问控制列表 (1)通配符 当进行IP地址匹配的时候,后面会跟着32位掩码位,这32位称为通配符。 通配符,也是点分十进制格式,换算成二进制后,“0”表示“匹配…

【软考】模拟考卷错题本2024-05-07

1 项目路径 这里的图没有加载出来,没u哦i关系了。其实主要是的算出最长的路径中包含那些元素即可。这里是蒙圈了,没有考虑到还有更长的。要顾头也顾尾。 2 算法分析-贪心 该问题主要考核的是算法设计策略来达到目标的方式。主要的设计策略有:…

Linux变量的认识及环境变量配置详解

文章目录 1、变量的划分2、局部变量3、全局变量4、环境变量4.1、概述4.2、配置临时环境变量4.3、配置永久环境变量4.3.1、用户级配置文件1)配置方法一:~/.bashrc文件2)配置方法二:~/.profile文件3)配置方法三&#xff…

CTF-reverse二维四向迷宫路径求解

二维四向迷宫是一个re中的常考点,说不上难,但也不简单,本篇记录了常规的二维四向迷宫解题套路以及帮助快速解题的脚本 可能你看我的教程会觉得十分繁琐,但实际只要你用了一次熟练之后,基本都是拿到迷宫就一题一分钟解决…

jmeter控制器讲解

1,随机顺序控制器和随机控制器的区别:随机顺序控制器下所有的接口都会执行,只是执行顺序是随机的,随机控制器下所有的接口中随机执行一个接口,其余接口不执行。

【跨境商家必读】TikTok Shop商城运营全指南

随着社交媒体和电子商务之间界限的日益模糊,一种全新的购物平台——TikTok商城,正在迅速成为全球跨境商家们关注的焦点。在这个竞争激烈的TikTok跨境电商领域中,了解如何有效利用TikTok Shop的各项功能,理解其独特的运营模式&…

Linux进程——Linux进程间切换与命令行参数

前言:在上一篇了解完进程状态后,我们简单了解了进程优先级,然后遗留了一点内容,本篇我们就来研究进程间的切换,来理解上篇提到的并发。如果对进程优先级还有没理解的地方可以先阅读: Linux进程优先级 本篇…

Gmail邮箱怎么注册?2024年完整指南(包含跳过手机号验证)

一、为什么要注册Gmail邮箱? 全球通用性:Gmail是一个全球性的邮件服务平台,被广泛认可和信赖。因为客户对于Gmail的接受度高,无需担心邮件被自动标记为垃圾邮件。 整合营销工具:通过Gmail账号,你可以轻松…

C++之大数运算

溪云初起日沉阁 山雨欲来风满楼 契子✨ 我们知道数据类型皆有范围,一旦超出了这个范围就会造成溢出问题 今天说说我们常见的数据类型范围: 我们平时写代码也会遇到数据类型范围溢出问题: 比如 ~ 我们之前写的学生管理系统在用 int类型 填写…

stack的使用

1.栈的定义 我们可以看到模板参数里面有一个容器适配器 ,什么是适配器?比如充电器就叫做电源适配器,用在做转换,对电压进行相关的转换适配我们的设备。栈,队列不是自己直接管理数据,是让其他容器管理数据&a…

java-函数式编程-语法

目录 1、函数表现形式 分类 lambda表达式 参数类型可以全写,也可以全不写,但不能一部分写,一部分不写lambda 的省略策略:凡是可推导,都可以省略 方法引用 练习-判断语法正确性 练习-写出与方法引用等价的lambda表达式…

新火种AI|马斯克聘用OpenAI泄密者,他们的梁子着实越结越深...

作者:小岩 编辑:彩云 就在最近,昔日就职于OpenAI的工程师Pavel Izmailov正式加入了马斯克的AI团队,他还在自己的推特上大张旗鼓的做着宣传:研究院xai。 AI工程师的跳槽本不值得惊讶,但Pavel的跳槽却在行…

LSTM神经网络 vs Transformer在量化中的应用

LSTM,全称Long Short-Term Memory,是一种特殊的递归神经网络。它通过巧妙的"门"结构,可以有效地捕捉时间序列数据中的长期依赖关系。这一特点,使得LSTM在处理股价这种具有时间序列特性的数据时,展现出了非凡的潜力。 这种特殊的递归神经网络 与一般的前馈神经网络不…