MySQL開發規範

2021-09-07 19:16:06 字數 3016 閱讀 4463

本文件是為幫助研發與運維人員按照規範使用mysql資料庫,提公升研發寫sql的水平。致力於提供乙個安全,穩定,高效能的資料庫環境。

命名規範

1) 庫名、表名、欄位名必須使用小寫字母,"_"分割。

2) 庫名、表名、欄位名不超過12個字元。

3) 庫名、表名、欄位名禁止使用mysql保留字,見附件。

4) 庫名、表名、欄位名見名知意,建議使用名詞而不是動詞。

5) 資料物件、變數的命名都採用英文本元,禁止使用中文命名。

6) 臨時庫、表名必須以tmp為字首,並以日期為字尾。

7) 備份庫、表必須以bak為字首,並以日期為字尾。

基礎規範

1) 所有表統一使用innodb儲存引擎。

2) 表字符集選擇utf8mb4。

3) 所有表和列都需要新增注釋。

4) 禁止在資料庫中儲存、檔案。

6) 禁止客戶端直接操作測試,生產資料庫。

7) 研發保證應用與資料庫表結構版本的統一,並提供相應的資料庫回滾策略。

8) 表結構變更dba審核未通過的,不允許上線。

字段設計規範

1) 每張表必須有整型主鍵。如:id bigint(20) unsigned , not null,不要自增。

2) 禁止default null,建議not null 設定預設值。

3) 儲存精確浮點數必須使用decimal替代float和double,或者使用bigint(需要做轉換)。

4) 建議使用unsigned儲存非負數值。

5) 不建議使用enum型別,使用tinyint來代替。

6) 建議使用int unsigned儲存ipv4。

7) 禁止在資料庫中儲存明文密碼。

8) 整形定義中建議採用int(10),而不是int(1),int(11)或其他。

9) 儲存狀態,性別等,用tinyint。

10) 將過大字段拆分到其他表中。盡可能不使用text、blob型別。如果必須使用,業務表中的text,blob中欄位,必須要拆分到單獨的表中儲存。

11) 需要根據實際的寬度來選擇varchar(n)型別的寬度。

12) n表示的是字元數不是位元組數. varchar(n),n盡可能小,進行排序和建立臨時表一類的記憶體操作時,會使用n的長度申請記憶體。

13) 儲存年使用year型別,儲存日期使用date型別。

14) 13 儲存時間(精確到秒)建議使用timestamp型別,因為timestamp使用4位元組,datetime使用8個位元組。timestamp型別儲存的值不能比1970早或比2037晚。

一句話總結:

 能not null 就not null,char、varchar用not null default '',tinyint、smallint、int用not null default 0。

 char、varchar取值要吝嗇,根據實際需求給,比如人名一般不超過5個,varchar(5),不要varchar(200)。int、tinyint這類,int(1)和int(13)都是一樣的,

 我們統一用int(10),tinyint取值範圍[-128,127],加了unsigned取值[0,255],如果不需要儲存負數,整型型別的加unsigned。

索引規範

1) 單張表的索參數量控制在5個以內。

2) 復合索引中的字段數建議不超過5個。

3) 非唯一索引必須按照"idx_欄位名稱_欄位名稱[_欄位名]"進行命名。

4) 唯一索引必須按照"uniq_欄位名稱_欄位名稱[_欄位名]"進行命名。

5) 合理利用覆蓋索引。不使用更新頻繁的列做為索引。

6) 對長字串考慮使用字首索引,字首索引長度不超過8個字元。

7) 索引欄位的順序需要考慮字段值去重之後的個數,個數多的放在前面。

8) 使用explain判斷sql語句是否合理使用索引,盡量避免extra列出現:using file sort,usingtemporary。

9) update、delete語句需要根據where條件新增索引。

10) 合理建立聯合索引(避免冗餘),(a,b,c) 相當於 (a) 、(a,b) 、(a,b,c),但(a,c)只能用到部分索引。

索引禁忌

1) 不在選擇性低的列上建立索引,例如"性別", "狀態", "型別"。

2) 不在索引列進行數**算和函式運算。

3) 盡量不使用外來鍵。

4) 高併發場景不建議使用唯一索引。

5) 不使用前導查詢,如like "%ab",like "%ab%"。

6 sql語句規範

1) sql語句中in包含的值不應過多(不超過1000個)

2) update、delete語句不使用limit。

3) where條件中必須使用合適的型別,避免mysql進行隱式型別轉化。

4) select語句只獲取需要的字段。

5) select、insert語句必須顯式的指明欄位名稱,不使用select *,不使用insert into table()。

6) where條件中的非等值條件(in、between、<、<=、>、>=)會導致後面的條件使用不了索引。

7) 避免在sql語句進行數**算或者函式運算,容易將業務邏輯和db耦合在一起。

8) insert語句使用batch提交(insert into table values(),(),()……),values的個數不應過多。

9) 避免使用儲存過程、觸發器、函式等,容易將業務邏輯和db耦合在一起,並且mysql的儲存過程、觸發器、函式中存在一定的bug。

10) 避免使用join。

11) 使用合理的sql語句減少與資料庫的互動次數。

12) 不使用order by rand(),使用其他方法替換。

13) 建議使用合理的分頁方式以提高分頁的效率。

14) 統計表中記錄數時使用count(*),而不是count(primary_key)和count(1)。

mysql 的開發規範 MySQL開發規範

一 基礎規範 1 使用innodb儲存引擎 2 資料庫字符集使用utf8,校對字符集使用utf8 general ci 3 所有表 欄位都盡量新增注釋 4 庫名 表名 欄位名使用小寫字母,禁止超過32個字元,須見名知意 5 非唯一索引以 idx 欄位1 欄位2 命名,唯一索引必須以 uniq 欄位1...

MySQL開發規範

1 單張表中索參數量不超過5個 建議3個左右 如果超時,一般情況下表能夠進行二次拆分。2 單個索引中的字段數不超過5個 建議3個以內 3 對字串使 用字首索引。4 建議優先考慮字首索引,必要時可新增偽列並建立索引。1 表必須有主鍵。2 不使用更新頻繁的列作為主鍵。3 盡量不選擇字串列作為主鍵。4 不...

MySQL開發規範

1 庫名 表名 欄位名必須使用小寫字母並採用下劃線分割 2 庫名 表名 欄位名支援最多32個字元,統一規範 易於辨識以及減少傳輸量不要超過32 3 庫名 表名 欄位名禁止使用mysql保留關鍵字 4 臨時庫 臨時表名必須以tmp為字首並以日期為字尾 5 備份庫 備份表名必須以bak為字首並以日期為字...