SSM框架mysql查询size为与实际条数不一致

     问题    

        今天遇到了一个非常奇怪的问题,在我通过外键查询的时候发现查询到的size与实际条数不一致。

     解决

        调试之后才发现原来是我的外键ID在另外一张表不存在。特地搭建了一个demo来测试这个问题。

     环境:  SSM框架

     过程

        SSM框架mysql查询size为与实际条数不一致

        SSM框架mysql查询size为与实际条数不一致

SSM框架mysql查询size为与实际条数不一致

这就是整个过程了,一开始感觉是逻辑问题返回size与实际数值 不对,调试了半天百思不得其解  后来在Navicat中查询后才发现了个这个问题,

SSM框架mysql查询size为与实际条数不一致

有一个空值 ,到了java中填充不到所以为null值。实际错误是user中的role_id在role表中不存在

SSM框架mysql查询size为与实际条数不一致

SSM框架mysql查询size为与实际条数不一致

这个是我基于这个错误搭建的小demo,很直观,到了实际的项目中表连接不止一个,列也多的数不清的时候这个错误就很难找了。然而很多人就会问了建立表约束不就可以避免这个错误了,其实一开始我也是那么想的,可是想想我们经理一开始告诉过我,不要建立表约束当初刚工作不太懂知道遇到了这个错误,我仔细的查找了为什么不创建表约束。后来才发现,原来经验真的很重要!做了那么久做的事情并不是没有道理的

大家做项目考虑的应该逻辑功能健全,之后就是性能问题了。大家不做mysql的外键约束有以下几点

系统环境:

     mysql对外键的支持没有Oracle SqlServer做的那么好

还有业务环境下:

    数据一致性要求高 用外键

    业务比较复杂,团队,模块复杂 用外键

    数据量大 不用外键

    数据增删插入修改高 不用外键

在这个NOSQL盛行的年代使用这种方法大家都开始考虑如何提高自己项目的性能,redis基于内存进行数据的交互效率是现在已知的数据库中效率最快的,可惜我们的项目中并没有引入。本人表示非常可惜,但是对于关系型数据库已死这个热门的话题来讲,我不做过多评论。对于NOSQL目前我也在自学中,欢迎大家交流学习!