关于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。当外键所约束的实例被删除时,将当前实例的所有字段值设置为空。

总结

其实用级联很少,总是听别人说影响效率,当然,数据小的时候,不会出什么问题。如果数据大了,则需要优化数据库和查询语句。(不过这些目前我都没有学)。

最新文章

  1. [LeetCode] Shortest Word Distance 最短单词距离
  2. c#模拟js escape方法
  3. STM8L --- External interrupt
  4. 【Android开发坑系列】之经常被忽略的背景图片内存泄露
  5. Cas_Java客户端登录相关过滤器的处理流程
  6. office 2013 产品秘钥
  7. Hibernate之总结
  8. JDK源码学习系列01----String
  9. POJ 3507 Judging Olympia
  10. jquery.proxy的四种使用场景及疑问
  11. .net的retrofit--WebApiClient底层篇
  12. elementui+vue修改elementUi默认样式不生效
  13. 使用npm私有服务器保存公司内部强业务类型组件(三):关于业务性组件的一点思考
  14. Nexus3.x安装及配置
  15. P2789 直线交点数
  16. [namespace]PHP命名空间的动态访问 & 使用技巧
  17. pyqt5-基础
  18. mybatis注解方式批量插入数据
  19. Can't read [proguard.ClassPathEntry@1a0c10f] (No such file or directory)
  20. 实现ssh的无password登录

热门文章

  1. 《Design by Contract for Embedded Software》 翻译
  2. Apache ShenYu 集成 RocketMQ 实时采集海量日志的实践
  3. MYSQL5.7 保姆级安装教程
  4. 6、将两个字符串连接起来,不使用strcat函数
  5. 【Java并发004】原理层面:synchronized关键字全解析
  6. 再见CMS
  7. 通过启动脚本控制PHP-FPM开关
  8. vue3 + element plus 使用字节跳动图标
  9. 【每日一题】【DFS&每个点都调用一次前后左右】由1连接的岛屿数量-211031/220216
  10. 几种数据库jar包获取方式