MySQL 開(kāi)發(fā)應(yīng)用規(guī)范(信息集團(tuán)統(tǒng)一下發(fā))

編寫(xiě)目的:

為避免開(kāi)發(fā)過(guò)程產(chǎn)生不適當(dāng)?shù)?SQL 內(nèi)容,導(dǎo)致創(chuàng)建的數(shù)據(jù)庫(kù)對(duì)象過(guò)程中出現(xiàn)問(wèn)題或者數(shù)據(jù)庫(kù)使用中耗費(fèi)更多系統(tǒng)資源,特制定本規(guī)范文檔作為集團(tuán)信息中心(xxx)MySQL數(shù)據(jù)庫(kù)的 SQL 開(kāi)發(fā)規(guī)范,
以保障各系統(tǒng)數(shù)據(jù)庫(kù)高效穩(wěn)定運(yùn)行。

二、適用范圍

本規(guī)范文檔適用于集團(tuán)信息中心(xxx)所有使用 MySQL 數(shù)據(jù)庫(kù)的開(kāi)發(fā)疟赊、測(cè)試、生產(chǎn)環(huán)境峡碉。所有使用 MySQL 數(shù)據(jù)庫(kù)的開(kāi)發(fā)近哟、測(cè)試及 DBA 人員均要閱讀本文檔。
建議開(kāi)發(fā)人員和測(cè)試人員閱讀“SQL 規(guī)范要求”內(nèi)容鲫寄;DBA 人員詳細(xì)閱讀“SQL 規(guī)范要求”及“規(guī)范詳細(xì)說(shuō)明”內(nèi)容吉执。

三、術(shù)語(yǔ)

序號(hào) 名詞 名詞解釋 備注
1 最左原則 又稱(chēng)“最左前綴原則”或“ 最左前綴匹配原則”地来,指 MySQL 創(chuàng)建復(fù)合索引的規(guī)則是首先會(huì)對(duì)復(fù)合索引的最左邊的鼠证,也就是第一個(gè)字段的數(shù)據(jù)進(jìn)行排序,在第一個(gè)字段的排序基礎(chǔ)上靠抑,然后再對(duì)后面第二個(gè)字段進(jìn)行排序量九。 MySQL 索引規(guī)則中要求復(fù)合索引中要想使用第二個(gè)字段,則必須先使用到第一個(gè)字段。
2 強(qiáng)制級(jí)別 該級(jí)別務(wù)必遵守荠列,是 MySQL 開(kāi)發(fā)過(guò)程的“軍規(guī)”类浪,違反該級(jí)別規(guī)則禁止上線。 無(wú)
3 強(qiáng)烈建議級(jí)別 該級(jí)別介于強(qiáng)制與建議級(jí)別之間肌似,因較難量化及考量费就,故不適合做強(qiáng)制要求,但進(jìn)行開(kāi)發(fā)時(shí)也應(yīng)結(jié)合業(yè)務(wù)特點(diǎn)來(lái)遵守該級(jí)別規(guī)定川队。 無(wú)

三力细、SQL 規(guī)范要求

(一) 強(qiáng)制級(jí)別

  1. 同種用途的字段在不同表中保持同一字段定義」潭睿【詳情】

  2. 每個(gè)表必須有主鍵眠蚂。

  3. 表引擎選用 INNODB 引擎;字符集統(tǒng)一使用 UTF8斗躏∈呕郏【詳情】

  4. 表及字段必須有 COMMENT 注釋說(shuō)明,而且注釋禁止使用半角(英文)分號(hào)啄糙〉殉迹【詳情】

  5. 在滿足需求的提前下,選擇性能更高的字段類(lèi)型隧饼。按性能從好到差的排序?yàn)椋?/p>

TINYINT>SMALLINT>MEDIUMINT>INT>BIGINT>CHAR/VARCHAR>TEXT/BLO B沈堡;【詳情】

  1. 根據(jù)字段實(shí)際存儲(chǔ)情況選擇合適的字段長(zhǎng)度,在滿足業(yè)務(wù)需求前提下燕雁,字段長(zhǎng)度盡可能最小長(zhǎng)度的定義踱蛀。【詳情】

例如:能使用 VARCHAR(10)則不使用 VARCHAR(100)贵白。VARCHAR(N),N 表示的是字符數(shù)不是字節(jié)數(shù)崩泡,比如 VARCHAR(255)禁荒,可以最大可存儲(chǔ) 255 個(gè)漢字,需要根據(jù)實(shí)際的寬度來(lái)選擇 N角撞。

  1. 每個(gè)表必須要有 update_time 字段呛伴。【詳情】

update_time 字段定義:

update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '記錄更新時(shí)間'

  1. 禁止冗余索引谒所、重復(fù)索引热康。【詳情】

合理創(chuàng)建復(fù)合索引(避免冗余)劣领;如:索引(a,b,c) 相當(dāng)于索引(a)姐军、(a,b)和(a,b,c)。

  1. 查詢數(shù)據(jù)時(shí),禁止使用“SELECT *”奕锌,需給出明確的字段著觉。【詳情】

  2. INSERT 語(yǔ)句必須列出所有使用的字段名惊暴”穑【詳情】

  3. UPDATE 和 DELETE 必須要檢查是否需要帶 WHERE 條件,防止整張表被誤修改或誤刪除辽话。

  4. 在進(jìn)行結(jié)果集合并(UNION 或 UNION ALL)時(shí)肄鸽,若無(wú)需對(duì)結(jié)果進(jìn)行去重,則用 UNION ALL(UNION 有去重開(kāi)銷(xiāo))油啤。

  5. WHERE 后面條件典徘,如果用到復(fù)合索引,注意 MySQL 遵循最左原則村砂±谜【詳情】

  6. 所有數(shù)據(jù)庫(kù)對(duì)象(庫(kù)名,表名础废,字段名等)的命名汛骂,不得使用漢字及特殊符號(hào)(包括空格、逗號(hào)及常用 SQL 關(guān)鍵字等)评腺。

  7. 生產(chǎn)環(huán)境數(shù)據(jù)庫(kù)遷移中使用的表 bc_stop_capture 表結(jié)構(gòu)為

CREATE TABLE IF NOT EXISTS bc_stop_capture(tableName VARCHAR(50)

PRIMARY KEY);

生產(chǎn)環(huán)境數(shù)據(jù)庫(kù)的遷移操作帘瞭,步驟如下:

(例,遷移對(duì)象表為 inventory_book 時(shí))

START TRANSACTION; INSERT INTO bc_stop_capture DELETE FROM inventory_book DELETE FROM inventory_book COMMIT;

VALUES('inventory_book'); WHERE bill_date < '2016-06-30'; WHERE tableName='inventory_book';

注意:1. 表 bc_stop_capture 在數(shù)據(jù)遷移完成后不能刪除蒿讥。

數(shù)據(jù)遷移操作必須按照遷移步驟執(zhí)行蝶念,否則下游各系統(tǒng)會(huì)將遷移動(dòng)作識(shí)別為刪除操作。

(二) 強(qiáng)烈建議級(jí)別

  1. 分表的分片字段無(wú)需建立索引芋绸。因該分片字段的數(shù)據(jù)內(nèi)容均一樣媒殉,建立索引無(wú)意義。

  2. WHERE 后面條件摔敛,需防止字段類(lèi)型被隱式強(qiáng)制轉(zhuǎn)換廷蓉。【詳情】

  3. SQL 語(yǔ)句中盡量少用 JOIN马昙,而應(yīng)該在程序中組裝數(shù)據(jù)桃犬,讓 SQL 更簡(jiǎn)單⌒欣悖【詳情】

  4. 將大表中使用頻率高的字段和使用頻率低的字段攒暇,拆分成兩張表存儲(chǔ)∽臃浚【詳情】

(三) 建議級(jí)別

  1. 所有數(shù)據(jù)庫(kù)對(duì)象(庫(kù)名形用,表名就轧,字段名等)不建議超過(guò) 30 個(gè)字符。

  2. 所有數(shù)據(jù)庫(kù)對(duì)象(庫(kù)名尾序,表名钓丰,字段名等)應(yīng)全部為小寫(xiě),單詞之間使用下劃線“_”分割每币。

  3. 所有數(shù)據(jù)庫(kù)對(duì)象(庫(kù)名携丁,表名,字段名等)應(yīng)使用富有意義的英文兰怠,一般情況下不建議使用拼音命名梦鉴。

歷史表以“_his”為后綴。例如:inventory_his

五揭保、規(guī)范詳細(xì)說(shuō)明

待補(bǔ)充肥橙。。秸侣。

六存筏、修訂記錄

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市味榛,隨后出現(xiàn)的幾起案子椭坚,更是在濱河造成了極大的恐慌,老刑警劉巖搏色,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件善茎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡频轿,警方通過(guò)查閱死者的電腦和手機(jī)垂涯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)航邢,“玉大人耕赘,你說(shuō)我怎么就攤上這事∩乓螅” “怎么了操骡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)秽之。 經(jīng)常有香客問(wèn)我,道長(zhǎng)吃既,這世上最難降的妖魔是什么考榨? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮鹦倚,結(jié)果婚禮上河质,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好掀鹅,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布散休。 她就那樣靜靜地躺著,像睡著了一般乐尊。 火紅的嫁衣襯著肌膚如雪戚丸。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,829評(píng)論 1 290
  • 那天扔嵌,我揣著相機(jī)與錄音限府,去河邊找鬼。 笑死痢缎,一個(gè)胖子當(dāng)著我的面吹牛胁勺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播独旷,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼署穗,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了嵌洼?” 一聲冷哼從身側(cè)響起案疲,我...
    開(kāi)封第一講書(shū)人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎咱台,沒(méi)想到半個(gè)月后络拌,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡回溺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年春贸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片遗遵。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡萍恕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出车要,到底是詐尸還是另有隱情允粤,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布翼岁,位于F島的核電站类垫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏琅坡。R本人自食惡果不足惜悉患,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望榆俺。 院中可真熱鬧售躁,春花似錦坞淮、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至市袖,卻和暖如春啡直,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背凌盯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工付枫, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人驰怎。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓阐滩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親县忌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掂榔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349