目錄
一、強制
1.count(*)作為標準統計行數的語法
2.count(distinct col) 計算該列除 null 之外的不重複行數
3.當某一列的值全是 null 時count(col)的返回結果為 0
4.使用 isnull()來判斷是否為 null 值
5.在**中寫分頁查詢邏輯時若 count 為 0 應直接返回
6.不得使用外來鍵與級聯
7.禁止使用儲存過程
8.資料訂正(特別是刪除、修改記錄操作)時先 select
二、推薦
1.in 操作能避免則避免
三、參考
1.如果有國際化需要所有的字元儲存與表示,均以 utf-8 編碼
2.truncate table 比 delete 速度快
不要使用 count(列名)或 count(常量)來替代 count(*),count(*)是 sql92 定義的 標準統計行數的語法,跟資料庫無關,跟 null 和非 null 無關。
說明:count(*)會統計值為 null 的行,而 count(列名)不會統計此列為 null 值的行。
注意 count(distinct col1, col2) 如果其中一列全為 null,那麼即使另一列有不同的值,也返回為 0。
但 sum(col)的返回結果為 null,因此使用 sum()時需注意npe問題。
正例:可以使用如下方式來避免 sum 的 npe 問題:select if(isnull(sum(g)),0,sum(g)) from table;說明:null 與任何值的直接比較都為 null。
1)null<>null的返回結果是 null,而不是 false。
2)null=null的返回結果是 null,而不是 true。
3)null<>1的返回結果是 null,而不是 true。
避免執行後面的分頁語句
不得使用外來鍵與級聯,一切外來鍵概念必須在應用層解決。
說明:以學生和成績的關係為例,學生表中的 student_id是主鍵,那麼成績表中的 student_id 則為外來鍵。如果更新學生表中的 student_id,同時觸發成績表中的 student_id 更新,即為級聯更新。外來鍵與級聯更新適用於單機低併發,不適合分布式、高併發集群;級聯更新是強阻塞,存在資料庫更新風暴的風險;外來鍵影響資料庫的插入速度。
儲存過程難以除錯和擴充套件,更沒有移植性。
資料訂正(特別是刪除、修改記錄操作)時,要先 select,避免出現誤刪除,確認無誤才能執行更新語句。
in 操作能避免則避免,若實在避免不了,需要仔細評估 in 後邊的集合元素數量,控制在1000 個之內。
如果有國際化需要,所有的字元儲存與表示,均以 utf-8 編碼,注意字元統計函式的區別。
說明:
select length("輕鬆工作"); 返回為 12如果需要儲存表情,那麼選擇utf8mb4來進行儲存,注意它與 utf-8 編碼的區別。select character_length("輕鬆工作"); 返回為 4
truncate table 比 delete 速度快,且使用的系統和事務日誌資源少,但 truncate 無事務且不觸發 trigger,有可能造成事故,故不建議在開發**中使用此語句。
說明:truncate table 在功能上與不帶 where 子句的 delete 語句相同。
編碼規約之索引規約
目錄 一 強制 1.業務上具有唯一特性的字段,即使是多個欄位的組合,也必須建成唯一索引 2.超過三個表禁止 join 3.在 varchar 欄位上建立索引時注意項 4.頁面搜尋嚴禁左模糊或者全模糊 二 推薦 1.如果有 order by 的場景注意索引的有序性 2.利用覆蓋索引來進行查詢操作,避免...
編碼規約之ORM對映
目錄 一 強制 1.在表查詢中一律不要使用 作為查詢的字段列表 2.pojo 類的布林屬性不能加 is而資料庫字段必須加 is 3.不要用 resultclass 當返回引數 4.sql.xml 配置引數使用 或 param 5.ibatis自帶的queryforlist不要使用 6.不允許直接拿 ...
編碼規約之應用分層
目錄 一 推薦 1.分層規約 二 參考 1.分層異常處理規約 2.分層領域模型規約 下圖中預設上層依賴於下層,箭頭關係表示可直接依賴。如 開放介面層可以依賴於 web 層,也可以直接依賴於 service 層,依此類推 開放介面層 可直接封裝 service 方法暴露成 rpc 介面 通過 web ...