一、表設計的規範
1. 每張表必須包含主鍵(id欄位)。(無論是臨時表、較小的配置表,還是無業務訪問的
資料表 都必須有主鍵)
a. id:主鍵
1. 主鍵不能包含業務含義。
2. 主鍵在任何情況下不允許被更新。
3. 主鍵必須由特定的主鍵生成系統生成或者自增長字段
2. 作為表間連線關係的字段,資料型別必須保持嚴格一致,避免索引無法正常使用。
3. 存在過期概念的表,在其設計之初就必須有過期機制,且有明確的過期時間。過期資料
必須遷移至歷史表中。
4、禁止使用外來鍵約束
5、禁止使用臨時表
二、資料型別建議
mysql 資料庫中盡量僅使用下文提及的資料型別。
數值型別
●decimal(m,d)
當表示定點小數的情況下使用該型別。定點數在mysql 內部以字串形式儲存,比浮點
數更精確,適合用來表示貨幣等精度高的資料。
●int 系列
所有整數型別字段使用int(tinyint、smallint、mediumint、int、bigint),根據所
存放的資料大小選擇合適的子型別,且所有int 型別都不使用長度限制。
字串型別
●char
當且僅當欄位儲存單個字元的情況下,可使用char(1)型別。超過乙個字元的字段,使
用可變長度型別。
●varchar
所有可變長度的字段均使用varchar 型別,對於有限類別的字段(如性別、狀態等),
均使用varchar 型別儲存能明顯表現其意義的字串。
當varchar 字段長度超過4000 時,須和原表進行分拆,與原表主鍵組成新錶儲存。
●text 系列
僅當需儲存的位元組數可能超過20000 時,使用text 系列型別(text、mediumtext、
longtext)。並和原表進行分拆,與原表主鍵組成新錶儲存,且每個表只允許有乙個text
系列型別字段。因為所有mysql 資料庫都會使用utf8 字符集,而text 最大只能存放64k
資料。時間型別
●date
只需要精確到天的字段使用date 型別。精確到「天」的取當前時期的操作使用curdate()
函式實現。
●datetime
需要精確到時間(時、分、秒)的字段使用datetime 型別。精確到「秒」的取當前時
間的操作使用 now()函式實現。
三、資料庫設計相關要求
1. 除主鍵外,需存在唯一性約束的,可通過建立以「uk_」為字首的唯一索引實現,但應
用中需要同時有唯一性檢查邏輯。
2 禁止任何業務邏輯通過封裝在資料庫中的 procedure/function/trigger 實現。
3、禁止業務邏輯使用計畫任務。
4、所有 query 的 where 條件中的變數,盡量使用繫結變數來實現,
5、禁止使用函式,在程式中完成邏輯功能
四、sql 相關要求
1、資料型別轉換
原則避免因資料型別轉換導致執行計畫有誤。
說明●where 條件中的過濾欄位如需轉換型別,只可轉換過濾值,不可轉換被過濾字段。
●表連線操作中,作為連線條件的字段的資料型別嚴格一致。
2、「c o u n t (…)」使用
除非是明確目的是統計某個欄位上值不為空的記錄的數目,否者只允許之用 count(*),
而不允許使用 count(column_name) 或者 count(1)。
3、「l i k e …」使用
只允許使用右模糊,不允許使用全模糊。
示例禁止:
select column_name from table_name like '%abc%';
允許:select column_name from table_name like 'abc%';
4、「select * from …」使用
原則為避免查詢中無用字段參與排序操作而導致的效能降低及潛在的安全隱患。原則上不建
議使用「select * from …」。
說明●當結果集中無需列出被查詢表的所有字段,且查詢中存在「order by」語句時。禁止
使用「select *」取出所有字段。
●連線查詢中,禁止使用「select *」。
5、表連線
原則規範連線語法以方便 sql 指令碼的閱讀及提公升連線操作效能。
說明●非外連線查詢中,連線表在「from」子句中列出,並以逗號分隔;連線條件在「where」
子句中列出,而不允許使用 join … on 方式實現 join。
●外連線查詢中,可使用「left join … on」語法;外連線一律使用「left join」表
示。●可以改寫為連線的子查詢禁止使用子查詢方式,而應改寫為連線方式。
示例 a.
非規範用法1:select col1 from tbl1
where col2 in (select col3 from tbl2);
規範化用法1:select col1 from tbl1,tbl2
where tbl1.col2 = tbl2.col3;
非規範用法2:select col1 from tbl1
6、盡量將or查詢拆分為多個sql做union all或在程式拼接(因為mysql本身優化器缺陷)
五、字符集
mysql 資料庫都會使用utf8 字符集,所有連線必須是utf8字符集。無特殊情況,不允許
使用gbk和latin1
六、關於ddl操作
閉市期間進行資料庫生產變更ddl操作,同時盡可能在業務壓力很小的情況下進行,如果
對造成的影響不確定,請與平台架構團隊溝通確認後再實施變更操作。
七、關於應用伺服器
所留連線生產資料庫伺服器,請將ip在上線前發給平台組mysql管理組(管文琦、王成瑞)
八、關於檢視
考慮的sql效率 任何情況下 不允許使用檢視
mysql 使用規範 MySQL使用規範
一 表設計類 強制類規範 1.建立表的儲存引擎必須是innodb。2.每個表必須顯式的指定乙個主鍵。3.不允許使用聯合主鍵。4.不允許使用外來鍵。5.不允許存在和主鍵重複的索引。6.自增長字段必須是主鍵或唯一索引。7.不允許在資料庫中儲存諸如,影像之類的二進位制資料。8.不允許使用text型別字段 ...
mysql 使用規範 MySQL使用規範
mysql使用規範 一 核心規範 www.2cto.com 1.不用資料庫做運營,如md5 order by rand 2.控制單錶資料量 a 單錶純int不超過1000w b 單錶含char不超過500w c 單庫不超過300 400個表 3.表字段數少而精 a 影響因素 i.io高效 ii.全表...
mysql使用規範 MySQL使用規範 MySQL
bitscn.com mysql使用規範 一 核心規範 1.不用資料庫做運營,如md5 order by rand 2.控制單錶資料量 a 單錶純int不超過1000w b 單錶含char不超過500w c 單庫不超過300 400個表 3.表字段數少而精 a 影響因素 i.io高效 ii.全表遍歷...