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 的性能?)
- mysql中自增字段类型(MySQL数字类型自增的坑)
- docker部署tomcat(Docker安装Tomcat、MySQL和Redis的步骤详解)
- mysql的分页原理(mysql分页的limit参数简单示例)
- mysql的存储性能优化(MySQL的查询缓存和Buffer Pool)
- mysql总是报错error(MySQL 5.6主从报错的实战记录)
- mysql是自动commit吗(详解MySQL与Spring的自动提交autocommit)
- mysql数据库事务处理(MySQL数据库事务与锁深入分析)
- 通过接口访问mysql数据库(使用mysql记录从url返回的http GET请求数据操作)
- mysql更新数据库表中的数据语法(Mysql联表update数据的示例详解)
- mysql安装时服务无法启动(MySQL 实例无法启动的问题分析及解决)
- mysql数据库触发器(MySQL中使用游标触发器的方法)
- mysql 主从配置详解(MySQL 8.0.15配置MGR单主多从的方法)
- mysql快速创建索引(MySQL创建高性能索引的全步骤)
- SQL SERVER与MySQL数据类型的对应关系
- mysql设计规则(专业级的MySQL开发设计规范及SQL编写规范)
- 终于来了,淘宝更改账户名测试中,快去看看你能不能修改(淘宝更改账户名测试中)
- 淘宝支持账号名修改,网友 终于可以 重新做人 了(淘宝支持账号名修改)
- 盘点那些年让人称奇的年终奖 最后一个赢辣条毫无悬念(盘点那些年让人称奇的年终奖)
- 你还没有升职吗 他竟因为几套激励理论,升职了(你还没有升职吗)
- 某知名企业绩效管理体系及薪酬分配体系操作手册(某知名企业绩效管理体系及薪酬分配体系操作手册)
- 职场人改不掉这4个习惯,只会越混越穷,一辈子也翻不了身(职场人改不掉这4个习惯)
热门推荐
- css竖排显示技巧(css魔法之左边竖条的多种实现方法)
- apache和yii域名配置(yii框架数据库关联查询操作示例)
- docker容器分配(Docker容器数据卷原理及使用方法解析)
- 如何打开mysql8.0客户端服务(MySQL mysqladmin客户端的使用简介)
- phpStudy启动失败时的解决方法 提示缺vc9运行库(phpStudy启动失败时的解决方法 提示缺vc9运行库)
- 阿里云申请ssl证书要好久(阿里云部署SSL证书详解)
- linux编写ftp程序(Linux实现文件上传ftp服务器脚本代码)
- react怎么使用父组件(关于antd tree和父子组件之间的传值问题react 总结)
- vue官网编辑器主题(vue实现主题切换的多种思路分享)
- 阿里云子账户密码重置(阿里云账号密码忘记了怎么办?阿里云账号密码找回方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9