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删除表内所有数据(mysql 大表批量删除大量数据的实现方法)
- mysqldump备份缺点(MySQL5.7 mysqldump备份与恢复的实现)
- navicat中如何使用sql语句(Navicat Premium操作MySQL数据库执行sql语句)
- mysql查询数据去除重复(MySQL 大批量插入,如何过滤掉重复数据?)
- mysqlbinlog优缺点(MySQL Binlog 日志处理工具对比分析)
- mysql修改表内字段的数据类型(mysql修改记录时update操作 字段=字段+字符串)
- mysql存储过程声明(MySQL存储过程的深入讲解in、out、inout)
- mysql事务未提交会锁表吗(Mysql事务中Update是否会锁表?)
- xampp数据库表在哪个文件夹(XAMPP集成环境中MySQL数据库的使用)
- mysql 删除数据回收空间(浅谈为什么MySQL不建议delete删除数据)
- mysql语句性能分析(聊聊MySQL的COUNT*的性能)
- mysql冷热数据分离方案(MySQL中使用流式查询避免数据OOM)
- mysql数据库出现乱码(数据库 MySQL中文乱码解决办法总结)
- mysql事务特性和隔离级别(Mysql事务特性和级别原理解析)
- 经常发这三种 朋友圈 的人,要迅速屏蔽(经常发这三种朋友圈)
- 有种尴尬叫朋友圈忘屏蔽,大学生上演社死现场,父母亲自下场吐槽(有种尴尬叫朋友圈忘屏蔽)
- 朋友圈屏蔽你的人,可以直接看淡了(朋友圈屏蔽你的人)
- 金球奖只青睐那些会戴珠宝的女人(金球奖只青睐那些会戴珠宝的女人)
- 浙江省一个县,人口超40万,建县历史超1100年(浙江省一个县人口超40万)
- 五代十国南唐历代国君(五代十国南唐历代国君)