MySQL现在包含一个事务数据字典,用于存储有关数据库对象的信息。在以前的MySQL版本中,字典相关数据是存储在元数据文件和非事务表中。
数据字典的好处:
-
统一集中存储字典数据
-
移除了基于文件的元数据存储
-
字典数据的事务性,安全性
-
字典对象的集中和统一的缓存
-
一些INFORMATION_SCHEMA中表的更简单和改进的实现。
-
原子DDL
数据字典表是不可见的。 不能用SELECT语句查询,也无法通过SHOW TABLES命令查看,也不存储在INFORMATION_SCHEMA中。 但是,在大多数情况下,可以查询相应的INFORMATION_SCHEMA中的表。 从概念上讲,INFORMATION_SCHEMA只是提供了一个相应的视图,MySQL通过该视图提供一些数据字典元数据给用户查看。 如:
无法直接访问mysql中的数据字典表
mysql> SELECT * FROM mysql.schemata;
ERROR 3554 (HY000): Access to data dictionary table 'mysql.schemata' is rejected.
mysql> desc schemata;
ERROR 3554 (HY000): Access to data dictionary table 'mysql.schemata' is rejected.
可通过INFORMATION_SCHEMA中国的schemata视图来访问
mysql> SELECT * FROM INFORMATION_SCHEMA.SCHEMATA/G
*************************** 1. row ***************************
CATALOG_NAME: def
SCHEMA_NAME: mysql
DEFAULT_CHARACTER_SET_NAME: utf8mb4
DEFAULT_COLLATION_NAME: utf8mb4_0900_ai_ci
SQL_PATH: NULL
省略。。。
5 rows in set (0.00 sec)
注:并不是所有数据字典表,都有相应的视图以供查询。例如:mysql.indexes,但是INFORMATION_SCHEMA.STATISTICS包含了大部分相同的信息。
在MySQL8.0之前版本中的一些系统表已经被数据字典所取代:
-
数据字典表event取代了event系统表
-
parameters 和routines数据字典表一起取代了proc系统表
注:升级到MySQL8.0应该注意这方面的问题,具体升级注意事项查看官方文档:
https://dev.mysql.com/doc/refman/8.0/en/upgrading.html
附录
MySQL8.0中所有的数据字典表:
-
catalogs:目录信息。
-
character_sets:有关可用字符集的信息。
-
collations:有关每个字符集的排序规则的信息。
-
column_statistics:列值的直方图统计信息。
-
column_type_elements:有关列使用的类型的信息。
-
columns:有关表中列的信息。
-
dd_properties:标识数据字典属性(例如其版本)的表。服务器使用它来确定是否必须将数据字典升级到较新的版本。
-
events:有关事件计划程序事件的信息。服务器在其启动序列期间加载此表中列出的事件,除非使用–skip-grant-tables选项启动。
-
foreign_keys,foreign_key_column_usage:有关外键的信息。
-
index_column_usage:有关索引使用的列的信息。
-
index_partitions:有关索引使用的分区的信息。
-
index_stats:用于存储执行ANALYZE TABLE时生成的动态索引统计信息。
-
indexes:有关表索引的信息。
-
innodb_ddl_log:存储用于崩溃安全DDL操作的DDL日志。
-
parameter_type_elements:有关存储过程和函数参数的信息,以及有关存储函数的返回值的信息。
-
parameters:有关存储过程和函数的信息。
-
resource_groups:有关资源组的信息。
-
routines:有关存储过程和函数的信息。
-
schemata:有关schemata的信息。在MySQL中,模式是一个数据库,因此该表提供了有关数据库的信息。
-
st_spatial_reference_systems:有关空间数据的可用空间参照系的信息。
-
table_partition_values:有关表分区使用的值的信息。
-
table_partitions:有关表使用的分区的信息。
-
table_stats:执行ANALYZE TABLE时生成的动态表统计信息。
-
tables:有关数据库中表的信息。
-
tablespace_files:有关表空间使用的文件的信息。
-
tablespaces:有关活动表空间的信息。
-
triggers:触发器的信息。
-
view_routine_usage:有关视图与它们使用的存储函数之间的依赖关系的信息。
-
view_table_usage:用于跟踪视图及其基础表之间的依赖关系。