mysql如何删除外键约束数据(MySQL中外键的创建、约束以及删除)
mysql如何删除外键约束数据
MySQL中外键的创建、约束以及删除前言
在mysql 3.23.44版本后,innodb引擎类型的表支持了外键约束。
外键的使用条件:
1.两个表必须是innodb表,myisam表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);
2.外键列必须建立了索引,mysql 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立;
3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;
外键的好处:可以使得两张表关联,保证数据的一致性和实现一些级联操作;
一、外键的创建
语法一:后续添加方法
|
alter table 表名 add constraint 约束名 foreign key (当前表中约束的字段) references 主表表名(要约束的字段名); alter table student add constraint fk_class_student foreign key (cls_id) class(cls_id) on update cascade on delete no action ; |
语法二:创建表的方法
|
create table student( sid int primary key , cls_id int not null , sname varchar (10) not null , constraint fk_class_student foreign key (cls_id) references class(cls_id) on update cascade on delete no action )engine=innodb default charset=utf8; |
一个额外点:
|
show create table class |
可以查询表的建表信息
|
create table `class` ( `cls_id` int not null , `cls_name` varchar (15) not null , primary key (`cls_id`) ) engine=innodb default charset=utf8 |
下面的演示我们就使用刚刚创建的这个学生表和班级表
内容如下
二,关于四种约束方式
在父表上进行update/delete操作时,子表的操作类型
- cascade 子表会删除包含与已删除键值有参照关系的所有数据
- set null 父表delete、update的时候,子表会将关联记录的外键字段所在列设为null
- restrict 拒绝有关联关系的字段的删除要求(这是默认设置,也是最安全的设置)
- no action 和restrict 类似
以我们刚刚设置的外键为例(on update cascade on delete no action)
当我们尝试进行删除操作时
|
delete from class where cls_id=1 |
结果如下
可以看到由于外键约束中on delete no action的存在,不允许对主表进行删除操作。但是子表可以
|
delete from student where cls_id=1 |
当我们对父表的关联键进行更新操作时,由于on update cascade的存在,可以正常更新
|
update class set cls_id=4 where cls_id=1 |
并且随着主表的更新,子表中的外键字段也进行了更新
三,删除外键的方法
|
alter table 子表名 drop foreign key 外键约束名 alter table student drop foreign key fk_class_student |
当我们将外键删除之后,父表的操作就变得可以正常进行了
总结
到此这篇关于mysql中外键创建、约束以及删除的文章就介绍到这了,更多相关mysql外键创建、约束及删除内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://blog.csdn.net/m0_51709303/article/details/112589209
- mysql如何删除整个表及数据(Mysql删除数据以及数据表的方法实例)
- linux安装nacos教程(Nacos配置MySQL8的方法)
- centos系统mysql安装及连接教程(CentOS8安装SQLServer2019的过程)
- mysql中mergeinto的用法(MySQL中exists、in及any的基本用法)
- mysqlbinlog优缺点(MySQL Binlog 日志处理工具对比分析)
- mysql获取随机数(MySQL 生成随机数字、字符串、日期、验证码及 UUID的方法)
- mysql双主状态不一致(MySQL GTID主备不一致的修复方案)
- mysql的limit的分页使用(获取 MySQL innodb B+tree 的高度的方法)
- 搭建php和mysql的运行环境(Windows环境开发PHP完整配置教程Apache+Mysql+PHP)
- docker 增大mysql连接数(docker中修改mysql最大连接数及配置文件的实现)
- mysql定时任务
- mysql 日期和时间处理函数(MySQL日期与时间函数的使用汇总)
- 最全面的mysql索引详解(MySQL 全文索引使用指南)
- mysql8.0自定义安装图解(M1芯片安装mysql8.0数据库的实现步骤图文)
- mysql创建存储过程的代码(MySQL修改存储过程的详细步骤)
- django操作默认数据库(Django数据库类库MySQLdb使用详解)
- 节日我在岗|警景相融 平安相伴(节日我在岗警景相融)
- 战 疫 时刻 致敬每一位石化大学的 守护者(战疫时刻)
- 老弄堂里的市井味道(老弄堂里的市井味道)
- 小米音乐可绑定QQ音乐, QQ音乐 真的会消失在小米的设备上吗(小米音乐可绑定QQ音乐)
- 小米Watch S1评测 或许能成为小米冲击高端可穿戴设备的里程碑(小米WatchS1评测或许能成为小米冲击高端可穿戴设备的里程碑)
- 手机QQ与小米路由器在一起 明天揭晓,敬请期待(手机QQ与小米路由器在一起)
热门推荐
- dedecms添加板块(织梦DedeCMS后台文件列表按文件名排序的方法简介)
- php数据错误处理函数(php中错误处理操作实例分析)
- tomcat服务页面打开超慢(Web服务器Tomcat高级优化)
- sql如何合并多个表中的数据(SQL 列不同的表查询结果合并操作)
- nginx 正向和反向代理(Nginx反向代理入门实战指南)
- dedecms新字段(DEDECMSv5.6 tags.php标签不能按照时间排序的问题)
- python代码返回值(Python 函数返回值的示例代码)
- h5抽奖的弹框制作(html5实现九宫格抽奖可固定抽中某项奖品)
- MVC中JS获取后台的数据
- vue怎么接收后台的数据(Vue封装全局toast组件的完整实例)