1. 程式人生 > >SSM框架mysql查詢size為與實際條數不一致

SSM框架mysql查詢size為與實際條數不一致

     問題    

        今天遇到了一個非常奇怪的問題,在我通過外來鍵查詢的時候發現查詢到的size與實際條數不一致。

     解決

        除錯之後才發現原來是我的外來鍵ID在另外一張表不存在。特地搭建了一個demo來測試這個問題。

     環境:  SSM框架

     過程

        

        


這就是整個過程了,一開始感覺是邏輯問題返回size與實際數值 不對,除錯了半天百思不得其解  後來在Navicat中查詢後才發現了個這個問題,


有一個空值 ,到了java中填充不到所以為null值。實際錯誤是user中的role_id在role表中不存在

這個是我基於這個錯誤搭建的小demo,很直觀,到了實際的專案中表連線不止一個,列也多的數不清的時候這個錯誤就很難找了。然而很多人就會問了建立表約束不就可以避免這個錯誤了,其實一開始我也是那麼想的,可是想想我們經理一開始告訴過我,不要建立表約束當初剛工作不太懂知道遇到了這個錯誤,我仔細的查找了為什麼不建立表約束。後來才發現,原來經驗真的很重要!做了那麼久做的事情並不是沒有道理的

大家做專案考慮的應該邏輯功能健全,之後就是效能問題了。大家不做mysql的外來鍵約束有以下幾點

系統環境:

     mysql對外來鍵的支援沒有Oracle SqlServer做的那麼好

還有業務環境下:

    資料一致性要求高 用外來鍵

    業務比較複雜,團隊,模組複雜 用外來鍵

    資料量大 不用外來鍵

    資料增刪插入修改高 不用外來鍵

在這個NOSQL盛行的年代使用這種方法大家都開始考慮如何提高自己專案的效能,redis基於記憶體進行資料的互動效率是現在已知的資料庫中效率最快的,可惜我們的專案中並沒有引入。本人表示非常可惜,但是對於關係型資料庫已死這個熱門的話題來講,我不做過多評論。對於NOSQL目前我也在自學中,歡迎大家交流學習!