SQL
1. 【強制】不要使用count( 列名) 或count( 常數) 來取代count( * ) , count( * ) 就是SQL 92 定義的標準統計行數的語法,跟資料庫無關,跟NULL 和非NULL 無關。
說明: count( * ) 會統計值為 NULL 的行,而 count( 欄位名稱 ) 不會統計此列為 NULL 值的行。
2. 【強制】 count(distinct col) 計算該列除 NULL 之外的不重複數量。注意 count(distinctcol 1, col 2 ) 如果其中一列全為 NULL ,那麼即使另一列有不同的值,也回傳為 0。
3. 【強制】當某一列的值全是NULL 時, count(col) 的回傳結果為0,但sum(col) 的回傳結果為NULL ,因此使用sum() 時需注意NPE 問題。
正例:可以使用以下方式來避免sum 的NPE 問題:SELECT IF(ISNULL(SUM(g)) ,0, SUM(g)) FROM table;
4. 【強制】使用ISNULL() 來判斷是否為NULL 值。注意: NULL 與任何值的直接比較都是 NULL。
說明:
1 ) NULL<>NULL 的回傳結果是 NULL ,而不是 false 。
2 ) NULL=NULL 的回傳結果是 NULL ,而不是 true 。
3 ) NULL<>1 的回傳結果是 NULL ,而不是 true 。
5. 【強制】 在程式碼中寫分頁查詢邏輯時,若 count 為 0 應直接返回,避免執行後面的分頁語句。
6. 【強制】不得使用外鍵與級聯,一切外鍵概念必須在應用層解決。
說明: ( 概念解釋 ) 學生表中的 student _ id 是主鍵,那麼成績表中的 student _ id 則為外鍵。 如果更新學生表中的 student _ id ,同時觸發成績表中的 student _ id 更新,則為級聯更新。外鍵與級聯更新適用於單機低並發,不適合分散式、高並發叢集 ; 級聯更新是強阻塞,存在資料庫更新風暴的風險 ; 外鍵影響資料庫的插入速度。
7. 【強制】禁止使用預存程序,預存程序難以除錯和擴展,更沒有移植性。
8. 【強制】資料訂正時,刪除和修改記錄時,要先 select ,避免出現誤刪除,確認無誤才能執語句。
9. 【推薦】 in 運算能避免則避免,若實在避免不了,需要仔細評估in 後邊的集合元素數量,控制在1000 個之內。
10. 【參考】如果有全球化需要,所有的字元儲存與表示,均以utf -8 編碼,那麼字元計數方法
注意:
說明:
SELECT LENGTH( "輕鬆運作" ); 傳回為12
SELECT CHARACTER _ LENGTH( "輕鬆運作" );傳回為4
若要使用表情,那麼使用utfmb 4 來進行存儲,注意它與utf -8 編碼的區別。
11. 【參考】 TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和交易日誌資源少,但TRUNCATE 無事務且不觸發trigger ,有可能造成事故,故不建議在開發程式碼中使用此語句。
說明: TRUNCATE TABLE 在函式上與不含 WHERE 子句的 DELETE 語句相同。