學習阿里巴巴開發手冊-13

SQL語句

1.不要使用 count(列名)或 count(常量)來替代 count(*),count(*)就是 SQL92 定義的標準統計行數的語法,跟數據庫無關,跟 NULL 和非 NULL 無關。

   說明:count(*)會統計值爲 NULL 的行,而 count(列名)不會統計此列爲 NULL 值的行。

2. count(distinct col) 計算該列除 NULL 之外的不重複數量。注意 count(distinct col1, col2) 如果其中一列全爲 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. IDB 數據訂正時,刪除和修改記錄時,要先 select,避免出現誤刪除,確認無誤才能提交執行。

9. in 操作能避免則避免,若實在避免不了,需要仔細評估 in 後邊的集合元素數量,控制在 1000 個之內。

10.因阿里巴巴全球化需要,所有的字符存儲與表示,均以 utf-8 編碼,那麼字符計數方法注意:說明:

   SELECT LENGTH("阿里巴巴"); 返回爲 12

   SELECT CHARACTER_LENGTH("阿里巴巴"); 返回爲 4

   如果要使用表情,那麼使用 utfmb4 來進行存儲,注意它與 utf-8 編碼。

11. TRUNCATE TABLE 比 DELETE 速度快,且使用的系統和事務日誌資源少,但 TRUNCATE無事務且不觸發 trigger,有可能造成事故,故不建議在開發代碼中使用此語句。

     說明:TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章