问题
今天遇到了一个非常奇怪的问题,在我通过外键查询的时候发现查询到的size与实际条数不一致。
解决
调试之后才发现原来是我的外键ID在另外一张表不存在。特地搭建了一个demo来测试这个问题。
环境: SSM框架
过程
这就是整个过程了,一开始感觉是逻辑问题返回size与实际数值 不对,调试了半天百思不得其解 后来在Navicat中查询后才发现了个这个问题,
有一个空值 ,到了java中填充不到所以为null值。实际错误是user中的role_id在role表中不存在
这个是我基于这个错误搭建的小demo,很直观,到了实际的项目中表连接不止一个,列也多的数不清的时候这个错误就很难找了。然而很多人就会问了建立表约束不就可以避免这个错误了,其实一开始我也是那么想的,可是想想我们经理一开始告诉过我,不要建立表约束当初刚工作不太懂知道遇到了这个错误,我仔细的查找了为什么不创建表约束。后来才发现,原来经验真的很重要!做了那么久做的事情并不是没有道理的
大家做项目考虑的应该逻辑功能健全,之后就是性能问题了。大家不做mysql的外键约束有以下几点
系统环境:
mysql对外键的支持没有Oracle SqlServer做的那么好
还有业务环境下:
数据一致性要求高 用外键
业务比较复杂,团队,模块复杂 用外键
数据量大 不用外键
数据增删插入修改高 不用外键
在这个NOSQL盛行的年代使用这种方法大家都开始考虑如何提高自己项目的性能,redis基于内存进行数据的交互效率是现在已知的数据库中效率最快的,可惜我们的项目中并没有引入。本人表示非常可惜,但是对于关系型数据库已死这个热门的话题来讲,我不做过多评论。对于NOSQL目前我也在自学中,欢迎大家交流学习!