MySQL 8 0 資料字典

2022-03-31 19:18:14 字數 1617 閱讀 4924

mysql 8.0 將資料庫元資訊都存放於innodb儲存引擎表中,在之前版本的mysql中,資料字典不僅僅存放於特定的儲存引擎表中,還存放於元資料檔案、非事務性儲存引擎表中。本文將會介紹mysql 8.0對資料字典的改進,以及改進帶來的好處、影響以及侷限性。

資料字典是資料庫重要的組成部分之一,那麼什麼是資料字典?資料字典包含哪些內容呢?資料字典是對資料庫中的資料、庫物件、表物件等的元資訊的集合。在mysql中,資料字典資訊內容就包括表結構、資料庫名或表名、欄位的資料型別、檢視、索引、表字段資訊、儲存過程、觸發器等內容。mysql information_schema庫提供了對資料局元資料、統計資訊、以及有關mysql server的訪問資訊(例如:資料庫名或表名,欄位的資料型別和訪問許可權等)。該庫中儲存的資訊也可以稱為mysql的資料字典。

在mysql8.0之前,mysql的資料字典資訊,並沒有全部存放在系統資料庫表中,部分資料庫資料字典資訊存放於檔案中,其餘的資料字典資訊存放於資料字典庫中(information_schema,mysql,sys)。例如表結構資訊存放在.frm檔案中,資料庫表字段資訊存放於information_schema下的columns表中。早期,5.6版本之前,myisam是mysql的預設儲存引擎,而作為myisam儲存引擎,它是沒有資料字典的。只有表結構資訊記錄在.frm檔案中。mysql5.6版本之後,將innodb儲存引擎作為預設的儲存引擎。在innodb儲存引擎中,新增了一些資料字典檔案用於存放資料字典元資訊,例如:.opt檔案,記錄了每個庫的一些基本資訊,包括庫的字符集等資訊,.trn.trg檔案用於存放觸發器的資訊內容。

最新的mysql 8.0 發布之後,對資料庫資料字典方面做了較大的改進。

8.0中對資料字典進行改進之後,很大程度上提高了對informations_schema的查詢效能,通過可以通過查表快速的獲得想要查詢的資料,原因是:

mysql8.0開始支援原子ddl操作,乙個原子ddl操作,具體的操作內容包括:資料字典更新,儲存引擎層的操作,在binlog中記錄ddl操作。並且這些操作都是原子性的,表示中間過程出現錯誤的時候,是可以完整回退的。這在之前版本的ddl操作中是不支援的。之前資料庫版本中一直沒有支援原子ddl的特性,是有原因的,因為在早期的資料庫版本中,資料庫元資訊存放於元資訊檔案中、非事務性表中以及特定儲存引擎的資料字典中。這些都無法保證ddl操作內容在乙個事務當中,無法保證原子性。

具體的原子ddl,後續會有專門的文章。

在8.0之前版本中,innodb_read_only引數可以阻止對innodb儲存引擎表的create和drop等更新操作。但是在mysql8.0中,開啟innodb_read_only引數阻止了所有儲存引擎的這些操作。create或者drop表的操作都需要更新資料字典表,8.0中這個資料字典表都改為了innodb儲存引擎,所以對於資料字典表的更新會失敗,從而導致各儲存引擎create和drop表失敗。同樣的像analyze tablealter table tbl_name engine=engine_name這種操作也會失敗,因為這些操作都要去更新資料字典表。

mysql8.0之後,在使用mysqldump和mysqlpump匯出資料時候,與之前有了一些不同,主要是以下幾點:

MySQL 8 0新特性 資料字典

mysql現在包含乙個事務資料字典,用於儲存有關資料庫物件的資訊。在以前的mysql版本中,字典相關資料是儲存在元資料檔案和非事務表中。資料字典的好處 資料字典表是不可見的。不能用select語句查詢,也無法通過show tables命令檢視,也不儲存在information schema中。但是,...

mysql fx0 MySQL8 0之資料字典

作者 沈 剛 沃趣科技資料庫技術專家 出品 沃趣科技 簡介 mysql 8.0 將資料庫元資訊都存放於innodb儲存引擎表中,在之前版本的mysql中,資料字典不僅僅存放於特定的儲存引擎表中,還存放於元資料檔案 非事務性儲存引擎表中。本文將會介紹mysql 8.0對資料字典的改進,以及改進帶來的好...

mysql資料字典

1 顯示資料庫列表2 顯示當前連線的資料庫 mysql select database 3 顯示庫中的資料表 mysql use mysql 指定mysql庫 mysql show tables 4 顯示資料表的結構 mysql describe yourtablename 說明 describe ...