MySQL開發注意事項(阿里巴巴開發手冊)

1. 建表規約

1.1 表示是否概念的字段約束

必須使用is_xxx的方式命名,數據類型是unsigned tinyint( 1 表示是,0 表示否 )

	注意:任何字段如果是非負數,必須是unsigned
1.2 表名、字段名約束

對於表名、字段名必須使用小寫字母或數字,禁止數字開頭,禁止兩個下劃線之間只出現數字,而且表名不能使用複數名稱

1.3 禁用保留字,比如:desc、range、match等等
1.4 索引名約束
索引名 名稱約束
主鍵索引 pk_字段名
唯一索引 uk_字段名
普通索引 idx_字段名
全文索引:InnoDB不支持,Myisam支持性能比較好,一般在char、varchar、text列上創建
1.5 小數類型約束

小數類型爲decimal,禁止使用float和double

	原因:在存儲的時候,float和double都存在精度損失的問題
	建議:存儲數據的範圍超過decimal的範圍,建議將數據拆分爲整數和小數分開進行存儲 
1.6 如果存儲的字符串長度幾乎相等,使用char定長字符串類型

2. 索引規約

2.1 業務上具有唯一特性的字段,即使是多個字段的組合,也必須建成唯一索引
	說明:建立唯一索引影響insert的數度可以忽略不記,但是建立唯一索引查找速度就會增加
2.2 超過三個表禁止join,需要join的字段,數據類型必須一致;多表關聯查詢時,保證被關聯的字段需要有索引
2.3 在varchar字段上建立索引,必須指定索引長度,沒必要對全字段建立索引
2.4 頁面搜索嚴禁左模糊或者全模糊,如果需要請走搜索引擎來解決。

3. SQL語句

3.1 不要使用count(列名)或者count(常量)來替代count(*)
count(*)會統計值爲NULL的行,而count(列)不會統計列爲null值的行
3.2 count(distinct col)計算該列除NULL之外的重複行
	注意:count(distinct col1,col2)如果其中一列全爲null,那麼即使另一列有不同的值,也會返回0
3.3 當某一列的值全是NULL,count(col)返回結果爲0但是sum(col)的返回結果爲NULL
3.4 使用isnull()來判斷是否爲null值
說明:null與任何值的比較都爲null
	1.null<>null返回值爲null,而不是false
	2.null=null返回值爲null,而不是true
	3.null<>1的返回結果是null,而不是true
3.5 代碼寫分頁查詢邏輯時,若count爲0應直接返回,避免執行後面的分頁語句
3.6 不得使用外鍵與級聯,一切外鍵必須在應用層解決
3.7 禁止使用存儲過程,存儲過程難以調試和擴展,更沒有移植性
3.8 數據訂正(刪除或者修改時)要先select,避免誤刪,確認無誤在進行訂正

4. ORM映射

4.1 在表查詢的時候,一律不準使用 * 作爲查詢字段列表,需要哪些字段必須明確寫明
4.2 POJO類的布爾屬性不準加is,而數據庫字段必須加is-,要求在resultMap中進行字段和屬性之間的映射
4.3 不要用resultClass當返回參數,即使所有類屬性名和數據庫字段一一對應,也需要定義
4.4 sql.xml配置參數使用#{}
4.5 不允許直接拿HashMap與HashTable作爲查詢結果集的輸出
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章