关于Mysql外键从新学习
2024-10-20 13:29:37
关于Mysql外键从新学习
参考:https://blog.csdn.net/u010373419/article/details/9321331
说实话,这是一个抄剩饭的文档。
为什么会从新学习外键
因为考试。
在实际开发中,可能用外键的情况不多,至少我设计我自己的项目是不会用外键。用了后,数据不自由了。当然,如果表设计后,给数据表加上外键,可能是一种不错的选择,但,自己的项目还是不会使用外键来约束自己的数据。至少我在代码中,做到部分的数据约束。
Mysql外键的关键
Innodb,如果引擎不是Innodb是无法添加外键的。我试了,一个小时,看了很多文档,然后51jb的网站一个文章讲了关于Innodb,必须是Innodb,否则外键的设置会失效。(虽然那个CSDN的博文也讲了,但我确实试了一个小时,总以为是我的代码的问题)
代码
建表
CREATE TABLE class(
id INT PRIMARY KEY AUTO_INCREMENT,
cname VARCHAR(20) NOT NULL
)ENGINE = INNODB DEFAULT CHARSET=utf8;
CREATE TABLE student(
id INT PRIMARY KEY AUTO_INCREMENT,
sname VARCHAR(20) NOT NULL,
cid INT NOT NULL,
CONSTRAINT stu_f_key FOREIGN KEY (cid) REFERENCES class(id) ON UPDATE CASCADE
)ENGINE = INNODB DEFAULT CHARSET=utf8;
# 插入数据
INSERT INTO class(cname) VALUES('计应1班'),('计应2班');
INSERT INTO student(sname,cid) VALUES('小皮',1),('小王',2);
操作
因为使用了 on update cascade
使用,我们修改class的id,相应的student的cid也会改变
UPDATE class SET id = 3 WHERE id = 1;
SELECT * FROM student;
关于on delete cascade
on delete xxx,on update xxx 属于级联操作,使用on delete时候要小心,因为如果使用on delete cascade ,如果删了class的实例,则会删除student的实例。
on delete set null。当外键所约束的实例被删除时,将当前实例的所有字段值设置为空。
总结
其实用级联很少,总是听别人说影响效率,当然,数据小的时候,不会出什么问题。如果数据大了,则需要优化数据库和查询语句。(不过这些目前我都没有学)。
最新文章
- [LeetCode] Shortest Word Distance 最短单词距离
- c#模拟js escape方法
- STM8L --- External interrupt
- 【Android开发坑系列】之经常被忽略的背景图片内存泄露
- Cas_Java客户端登录相关过滤器的处理流程
- office 2013 产品秘钥
- Hibernate之总结
- JDK源码学习系列01----String
- POJ 3507 Judging Olympia
- jquery.proxy的四种使用场景及疑问
- .net的retrofit--WebApiClient底层篇
- elementui+vue修改elementUi默认样式不生效
- 使用npm私有服务器保存公司内部强业务类型组件(三):关于业务性组件的一点思考
- Nexus3.x安装及配置
- P2789 直线交点数
- [namespace]PHP命名空间的动态访问 &; 使用技巧
- pyqt5-基础
- mybatis注解方式批量插入数据
- Can't read [proguard.ClassPathEntry@1a0c10f] (No such file or directory)
- 实现ssh的无password登录
热门文章
- 《Design by Contract for Embedded Software》 翻译
- Apache ShenYu 集成 RocketMQ 实时采集海量日志的实践
- MYSQL5.7 保姆级安装教程
- 6、将两个字符串连接起来,不使用strcat函数
- 【Java并发004】原理层面:synchronized关键字全解析
- 再见CMS
- 通过启动脚本控制PHP-FPM开关
- vue3 + element plus 使用字节跳动图标
- 【每日一题】【DFS&;每个点都调用一次前后左右】由1连接的岛屿数量-211031/220216
- 几种数据库jar包获取方式