Mysql開發規範

 

說明

  1. 是否遵照共同的開發規範是決定產品成敗的關鍵,因此編寫規範的目的是讓全部數據開發人員在開發過程當中有依可循。

數據庫庫表設計規範

  1. 豬八戒全部的數據庫、表原則上統一使用utf8編碼,若是須要使用emoji表情請使用utf8mb4編碼。
  2. 全部數據庫名以zhubajie_打頭,庫名、表名必須使用下劃線分割開,所有用小寫字母,表名以庫名的首字母縮寫做爲前綴(如zhubajie_market庫下全部的表都以mk_打頭),以保證該表的全局惟一性。
  3. 庫名錶名都是用名詞,不使用動詞,能見名知意。
  4. 數據庫引擎建議使用innodb 儘可能不要使用myisam,日誌儘可能使用tokudb。
  5. 存儲精度浮點數必須使用decimal替代float和double。
  6. 非負值的數字統一使用unsigned類型存儲。
  7. 必須使用int unsigned存儲IPV4。
  8. 整形定義中,不添加字段長度,好比使用int而不是int(5),即使定義了對字段長度、佔用空間也沒有意義。
  9. 能使用短數據類型的儘可能使用短數據類型。好比取值範圍是0-255時,使用tinyint unsigned。
  10. 使用tinyint類型代替enum類型(記錄狀態)。
  11. 儘量不適用text,禁止使用blob類型。若是必須使用text和blob類型,建議把該字段拆分獨立成一個表。
  12. 新版本的varchar(N)其中N是字節數而不是字符數。控制在255內。
  13. 存儲年使用year類型。
  14. 存儲日期使用date類型,默認值禁止使用0000-00-00,正確的應該使用linux最小時間戳1970-01-01,或者當前時間戳CURRENT_TIMESTAMP。
  15. 使用精確時間戳(精確到秒)儘可能使用timestamp類型,由於timestamp使用4字節,datetime使用8字節。
  16. 必須將字段定義爲not null,須要null時設置默認值(除text以外)。
  17. 禁止在數據庫中使用varbinary、blob存儲圖片、文件等。
  18. 新建表必須添加create_time(建立時間)、update_time(更新時間),類型爲timestamp,默認值爲CURRENT_TIMESTAMP。例如:
    `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
    `update_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '更新時間',
  19. 建表語句示例mysql

    CREATE TABLE `gift_test` ( 
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `category_id` int(11) DEFAULT NULL COMMENT '禮品類別id', 
      `securities` varchar(100) DEFAULT NULL COMMENT '券號', 
      `gift_isdelte` int(11) DEFAULT '2' COMMENT '是否刪除【1是,2否】', 
      `gift_sendstatus` int(11) DEFAULT '1' COMMENT '禮品發送狀態【1待發送,2已發送,3發送失敗】', 
      `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
      `update_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '更新時間',
      PRIMARY KEY (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '禮品發放';linux


索引設計規範

  1. 索引的命名統一以idx_開頭,後面包括索引字段名字,分別如下劃線分隔,每個字段只能佔用一個名字位。如idx_id_name(這是一個符合索引,包含了id和name兩個字段)
  2. 索引名稱必須使用小寫。
  3. 複合索引的字段數不能超過5個。
  4. 單表的索引數量儘可能控制在5個之內。
  5. 必須設置惟一主鍵,儘可能使用自增id做爲主鍵。
  6. 聯合索引的字段排列順序以去重後字段的數值的個數大小排序前後順序。好比表mk_task有id,name,id有50000個獨立值,name有5000個獨立值,那麼,順序是id在name前面,創建的索引是idx_id_name。
  7. Order by、distinct、group by後的字段儘可能創建索引。
  8. 狀態字段創建索引,好比性別字段(只有2個選項)。
  9. 根據update、delete的where儘可能使用有索引的字段或主鍵。
  10. 超過20字節的varchar字段建議創建前綴索引。
  11. 合理建立聯合索引(避免冗餘),(a,b,c)至關於(a)、(a、b)、(a、b、c)。
  12. 不能使用數據庫外鍵,由程序保證。
  13. Text類型字段不能使用索引。
  14. where語句中必須使用合適的數據類型,避免mysql進行隱式類型轉換。如id列定義成了varchar(20),咱們的sql寫成select name from table where id=100;這樣的sql會發生隱式類型轉換。
  15. 儘可能不使用mysql函數,把邏輯實如今應用程序裏。
  16. 禁止使用整表count。
  17. 禁止使用存儲過程、視圖、事件、觸發器。

SQL語句開發規範

  1. 控制sql的in列表值小於50個。
  2. where語句中必須使用合適的數據類型,避免mysql進行隱式類型轉換。
  3. 禁止使用select *,select只獲取須要的字段。
  4. insert必須顯示指明字段名稱,如:不能使用insert into table values();必須使用insert into addressbook(fname,lname,phone,fax,email) values('Rob',Rabbit,'674 1536','382 8364','rob@some.domain');這種方式。
  5. 避免使用不等於條件,where條件中的不等於不能使用索引。
  6. 合理使用分頁提升分頁效率,避免使用大的偏移量分頁,如select id from user limit 1000,10。
  7. 統計表中記錄使用count(*),不適用count(primary_key)和count(1)。
  8. 禁止jira提交的任何sql腳本包含drop語句,若是上線確實須要drop表,請找dba單獨說明。
  9. 全部生產環境的sql都須要提jira申請,而後再執行。
  10. 線上統計性質sql,left join表數量不能超過3個。
  11. 禁止使用強制索引,如 select id from user use index(idx_user_id) where user_id = 123;
  12. 對同一個表的屢次alter操做必須合併爲一次操做,如 alter table t add column b varchar(10),add index idx_aa(aa);sql

Mysql開發規範

說明

  1. 是否遵照共同的開發規範是決定產品成敗的關鍵,因此編寫規範的目的是讓全部數據開發人員在開發過程當中有依可循。

數據庫庫表設計規範

  1. 豬八戒全部的數據庫、表原則上統一使用utf8編碼,若是須要使用emoji表情請使用utf8mb4編碼。
  2. 全部數據庫名以zhubajie_打頭,庫名、表名必須使用下劃線分割開,所有用小寫字母,表名以庫名的首字母縮寫做爲前綴(如zhubajie_market庫下全部的表都以mk_打頭),以保證該表的全局惟一性。
  3. 庫名錶名都是用名詞,不使用動詞,能見名知意。
  4. 數據庫引擎建議使用innodb 儘可能不要使用myisam,日誌儘可能使用tokudb。
  5. 存儲精度浮點數必須使用decimal替代float和double。
  6. 非負值的數字統一使用unsigned類型存儲。
  7. 必須使用int unsigned存儲IPV4。
  8. 整形定義中,不添加字段長度,好比使用int而不是int(5),即使定義了對字段長度、佔用空間也沒有意義。
  9. 能使用短數據類型的儘可能使用短數據類型。好比取值範圍是0-255時,使用tinyint unsigned。
  10. 使用tinyint類型代替enum類型(記錄狀態)。
  11. 儘量不適用text,禁止使用blob類型。若是必須使用text和blob類型,建議把該字段拆分獨立成一個表。
  12. 新版本的varchar(N)其中N是字節數而不是字符數。控制在255內。
  13. 存儲年使用year類型。
  14. 存儲日期使用date類型,默認值禁止使用0000-00-00,正確的應該使用linux最小時間戳1970-01-01,或者當前時間戳CURRENT_TIMESTAMP。
  15. 使用精確時間戳(精確到秒)儘可能使用timestamp類型,由於timestamp使用4字節,datetime使用8字節。
  16. 必須將字段定義爲not null,須要null時設置默認值(除text以外)。
  17. 禁止在數據庫中使用varbinary、blob存儲圖片、文件等。
  18. 新建表必須添加create_time(建立時間)、update_time(更新時間),類型爲timestamp,默認值爲CURRENT_TIMESTAMP。例如:
    `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
    `update_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '更新時間',
  19. 建表語句示例數據庫

    CREATE TABLE `gift_test` ( 
      `id` int(11) NOT NULL AUTO_INCREMENT, 
      `category_id` int(11) DEFAULT NULL COMMENT '禮品類別id', 
      `securities` varchar(100) DEFAULT NULL COMMENT '券號', 
      `gift_isdelte` int(11) DEFAULT '2' COMMENT '是否刪除【1是,2否】', 
      `gift_sendstatus` int(11) DEFAULT '1' COMMENT '禮品發送狀態【1待發送,2已發送,3發送失敗】', 
      `create_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',
      `update_time` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '更新時間',
      PRIMARY KEY (`id`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '禮品發放';dom


索引設計規範

  1. 索引的命名統一以idx_開頭,後面包括索引字段名字,分別如下劃線分隔,每個字段只能佔用一個名字位。如idx_id_name(這是一個符合索引,包含了id和name兩個字段)
  2. 索引名稱必須使用小寫。
  3. 複合索引的字段數不能超過5個。
  4. 單表的索引數量儘可能控制在5個之內。
  5. 必須設置惟一主鍵,儘可能使用自增id做爲主鍵。
  6. 聯合索引的字段排列順序以去重後字段的數值的個數大小排序前後順序。好比表mk_task有id,name,id有50000個獨立值,name有5000個獨立值,那麼,順序是id在name前面,創建的索引是idx_id_name。
  7. Order by、distinct、group by後的字段儘可能創建索引。
  8. 狀態字段創建索引,好比性別字段(只有2個選項)。
  9. 根據update、delete的where儘可能使用有索引的字段或主鍵。
  10. 超過20字節的varchar字段建議創建前綴索引。
  11. 合理建立聯合索引(避免冗餘),(a,b,c)至關於(a)、(a、b)、(a、b、c)。
  12. 不能使用數據庫外鍵,由程序保證。
  13. Text類型字段不能使用索引。
  14. where語句中必須使用合適的數據類型,避免mysql進行隱式類型轉換。如id列定義成了varchar(20),咱們的sql寫成select name from table where id=100;這樣的sql會發生隱式類型轉換。
  15. 儘可能不使用mysql函數,把邏輯實如今應用程序裏。
  16. 禁止使用整表count。
  17. 禁止使用存儲過程、視圖、事件、觸發器。

SQL語句開發規範

  1. 控制sql的in列表值小於50個。
  2. where語句中必須使用合適的數據類型,避免mysql進行隱式類型轉換。
  3. 禁止使用select *,select只獲取須要的字段。
  4. insert必須顯示指明字段名稱,如:不能使用insert into table values();必須使用insert into addressbook(fname,lname,phone,fax,email) values('Rob',Rabbit,'674 1536','382 8364','rob@some.domain');這種方式。
  5. 避免使用不等於條件,where條件中的不等於不能使用索引。
  6. 合理使用分頁提升分頁效率,避免使用大的偏移量分頁,如select id from user limit 1000,10。
  7. 統計表中記錄使用count(*),不適用count(primary_key)和count(1)。
  8. 禁止jira提交的任何sql腳本包含drop語句,若是上線確實須要drop表,請找dba單獨說明。
  9. 全部生產環境的sql都須要提jira申請,而後再執行。
  10. 線上統計性質sql,left join表數量不能超過3個。
  11. 禁止使用強制索引,如 select id from user use index(idx_user_id) where user_id = 123;
  12. 對同一個表的屢次alter操做必須合併爲一次操做,如 alter table t add column b varchar(10),add index idx_aa(aa);函數

相關文章
相關標籤/搜索