婚戀網(wǎng)站翻譯可以做嗎模板建站常規(guī)流程
【重學 MySQL】四十九、阿里 MySQL 命名規(guī)范及 MySQL8 DDL 的原子化
- 阿里 MySQL 命名規(guī)范
- MySQL8 DDL的原子化
阿里 MySQL 命名規(guī)范
- 【
強制
】表名、字段名必須使用小寫字母或數(shù)字,禁止出現(xiàn)數(shù)字開頭,禁止兩個下劃線中間只出現(xiàn)數(shù)字。數(shù)據(jù)庫字段名的修改代價很大,因為無法進行預發(fā)布,所以字段名稱需要慎重考慮。- 正例:aliyun_admin,rdc_config,level3_name
- 反例:AliyunAdmin,rdcConfig,level_3_name
- 【
強制
】禁用保留字,如 desc、range、match、delayed 等,請參考 MySQL 官方保留字。 - 【
強制
】表必備三字段:id, gmt_create, gmt_modified。- 說明:其中 id 必為主鍵,類型為BIGINT UNSIGNED、單表時自增、步長為 1。gmt_create, gmt_modified 的類型均為 DATETIME 類型,前者現(xiàn)在時表示主動式創(chuàng)建,后者過去分詞表示被動式更新
- 【
推薦
】表的命名最好是遵循 “業(yè)務名稱_表的作用”。- 正例:alipay_task 、 force_project、 trade_config
- 【
推薦
】庫名與應用名稱盡量一致。 - 【參考】合適的字符存儲長度,不但節(jié)約數(shù)據(jù)庫表空間、節(jié)約索引存儲,更重要的是提升檢索速度。
對象 | 年齡區(qū)間 | 類型 | 字節(jié) | 表示范圍 |
---|---|---|---|---|
人 | 150歲之內(nèi) | tinyint unsigned | 1 | 無符號值:0到255 |
龜 | 數(shù)百歲 | smallint unsigned | 2 | 無符號值:0到65535 |
恐龍化石 | 數(shù)千萬年 | int unsigned | 4 | 無符號值:0到約43億 |
太陽 | 約50億年 | bigint unsigned | 8 | 無符號值:0到約10的19次方 |
MySQL8 DDL的原子化
MySQL 8.0引入了DDL(數(shù)據(jù)定義語言)的原子性特性,通過統(tǒng)一數(shù)據(jù)字典DD和DDL_LOG機制來確保DDL操作的原子性。
-
原子DDL的定義:原子DDL語句將數(shù)據(jù)字典更新、存儲引擎操作和與DDL操作相關(guān)聯(lián)的二進制日志寫入組合成單個原子操作。這意味著,即使服務器在操作過程中停止運行,操作也可以提交,將適用的更改保存到數(shù)據(jù)字典、存儲引擎和二進制日志中,或者回滾。
-
數(shù)據(jù)字典的統(tǒng)一:在MySQL 8.0之前,元數(shù)據(jù)存儲在元數(shù)據(jù)文件、非事務表和存儲引擎特定的字典中,這需要中間提交。MySQL 8.0引入了統(tǒng)一的數(shù)據(jù)字典DD,并廢棄了server層的元數(shù)據(jù)(如.frm、.opt、.par、.trg等),將InnoDB的元數(shù)據(jù)抽象出一條DD接口供server層和InnoDB層共用。這消除了中間提交的障礙,使得將DDL語句操作重構(gòu)為原子操作成為可能。
-
DDL_LOG機制:為了確保DDL操作的原子性,MySQL 8.0還引入了一套DDL_LOG機制。在執(zhí)行DDL的過程中,會記錄DDL操作到DDL_LOG表中。DDL_LOG表是InnoDB引擎表,通過保證DDL_LOG數(shù)據(jù)與DD數(shù)據(jù)字典修改達成一致,來解決DD數(shù)據(jù)字典修改、引擎層修改和寫binlog一致性問題。在DDL事務提交后,會讀取DDL_LOG內(nèi)容并進行回放執(zhí)行,以完成DDL操作的收尾動作。
-
原子DDL的特性:
- 原子DDL支持表DDL語句和非表DDL語句。與表相關(guān)的DDL操作需要存儲引擎支持,目前只有InnoDB存儲引擎支持原子DDL。
- DDL語句,無論是原子的還是其他的,都會隱式地結(jié)束當前會話中任何活動的事務。這意味著DDL語句不能在另一個事務中執(zhí)行,不能在事務控制語句(如START TRANSACTION)中執(zhí)行,或者與同一事務中的其他語句結(jié)合使用。
- 原子化的DDL操作在執(zhí)行過程中,如果MySQL服務突然停止,不會像之前的版本那樣生成一個報錯文件,而是會回滾操作。
綜上所述,遵循阿里MySQL命名規(guī)范可以提高數(shù)據(jù)庫的可讀性和可維護性,而MySQL8 DDL的原子化特性則確保了DDL操作的一致性和可靠性。