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