公司招聘网站排行榜中国电商平台排行榜前十
news/
2025/10/6 2:15:51/
文章来源:
公司招聘网站排行榜,中国电商平台排行榜前十,c2c商城网站建设费用,建站新体验为什么不推荐使用外键与级联?
【强制】不得使用外键与级联#xff0c;一切外键概念必须在应用层解决。
说明: 以学生和成绩的关系为例#xff0c;学生表中的 student_id 是主键#xff0c;那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id#xff0c…为什么不推荐使用外键与级联?
【强制】不得使用外键与级联一切外键概念必须在应用层解决。
说明: 以学生和成绩的关系为例学生表中的 student_id 是主键那么成绩表中的 student_id 则为外键。如果更新学生表中的 student_id同时触发成绩表中的 student_id 更新即为级联更新。外键与级联更新适用于单机低并发不适合分布式、高并发集群级联更新是强阻塞存在数据库更新风暴的风险外键影响数据库的插入速度来源于阿里巴巴开发手册 为什么不要用外键呢大部分人可能会这样回答
增加了复杂性 a. 每次做 DELETE 或者 UPDATE 都必须考虑外键约束会导致开发的时候很痛苦, 测试数据极为不方便; b. 外键的主从关系是定的假如那天需求有变化数据库中的这个字段根本不需要和其他表有关联的话就会增加很多麻烦。增加了额外工作数据库需要增加维护外键的工作比如当我们做一些涉及外键字段的增删更新操作之后需要触发相关操作去检查保证数据的的一致性和正确性这样会不得不消耗数据库资源。如果在应用层面去维护的话可以减小数据库压力对分库分表不友好因为分库分表下外键是无法生效的。……
我个人觉得上面这种回答不是特别的全面只是说了外键存在的一个常见的问题。实际上我们知道外键也是有很多好处的比如
保证了数据库数据的一致性和完整性级联操作方便减轻了程序代码量等。。。。。。
所以说不要一股脑的就抛弃了外键这个概念既然它存在就有它存在的道理如果系统不涉及分库分表并发量不是很高的情况还是可以考虑使用外键的。 什么是存储过程?
我们可以把存储过程看成是一些 SQL 语句的集合中间加了点逻辑控制语句。存储过程在业务比较复杂的时候是非常实用的比如很多时候我们完成一个操作可能需要写一大串 SQL 语句这时候我们就可以写有一个存储过程这样也方便了我们下一次的调用。存储过程一旦调试完成通过后就能稳定运行另外使用存储过程比单纯 SQL 语句执行要快因为存储过程是预编译过的。
存储过程在互联网公司应用不多因为存储过程难以调试和扩展而且没有移植性还会消耗数据库资源。
阿里巴巴 Java 开发手册里要求禁止使用存储过程。下载地址Java手册页面-阿里云开发者社区-阿里云官网开发者社区_云计算社区 drop、delete 与truncate 区别?
用法不同:
drop(丢弃数据): drop table 表名 直接将表都删除掉在删除表的时候使用。truncate (清空数据) : truncate table 表名 只删除表中的数据再插入数据的时候自增长 id 又从 1 开始在清空表中数据的时候使用。delete删除数据 : delete from 表名 where 列名值删除某一行的数据如果不加 where 子句和truncate table 表名作用类似。
truncate 和不带 where子句的 delete、以及 drop 都会删除表内的数据但是 truncate 和 delete 只删除数据不删除表的结构(定义)执行 drop 语句此表的结构也会删除也就是执行drop 之后对应的表不复存在 属于不同的数据库语言
truncate 和 drop 属于 DDL(数据定义语言)语句操作立即生效原数据不放到 rollback segment 中不能回滚操作不触发 trigger。而 delete 语句是 DML (数据库操作语言)语句这个操作会放到 rollback segment 中事务提交之后才生效。
总结
如果要删除整个数据库对象使用drop。如果要删除表中的部分行数据可以使用delete并配合WHERE子句。如果要快速删除表中的所有数据且不需要恢复数据可以使用truncate。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928927.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!