MySQL 元数据详细说明
目录
MySQL 元数据详细说明
1. 数据库级元数据
2. 表级元数据
3. 列级元数据
4. 索引元数据
5. 权限元数据
6. 其他关键元数据表
元数据访问方式
注意事项
MySQL 元数据详细说明
MySQL 元数据是描述数据库结构和属性的信息,包括数据库、表、列、索引等对象的定义和状态。以下是核心元数据类型及其详细说明:
1. 数据库级元数据
描述数据库本身的属性:
SCHEMATA
表
存储所有数据库信息,关键字段:CATALOG_NAME
:目录名(通常为def
)SCHEMA_NAME
:数据库名称DEFAULT_CHARACTER_SET_NAME
:默认字符集DEFAULT_COLLATION_NAME
:默认排序规则
- 查询示例:
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'your_database';
2. 表级元数据
描述表的定义和属性:
TABLES
表
关键字段:TABLE_SCHEMA
:所属数据库TABLE_NAME
:表名TABLE_TYPE
:表类型(BASE TABLE
/VIEW
)ENGINE
:存储引擎(如 InnoDB)ROW_FORMAT
:行格式(如 Dynamic)TABLE_ROWS
:预估行数AVG_ROW_LENGTH
:平均行长度(字节)
- 统计公式:
表大小估算:
$$ \text{表大小} \approx \text{TABLE_ROWS} \times \text{AVG_ROW_LENGTH} $$ - 查询示例:
SELECT TABLE_NAME, ENGINE, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'your_database';
3. 列级元数据
描述表中列的详细定义:
COLUMNS
表
关键字段:COLUMN_NAME
:列名DATA_TYPE
:数据类型(如int
,varchar
)CHARACTER_MAXIMUM_LENGTH
:字符类型最大长度IS_NULLABLE
:是否允许NULL
COLUMN_DEFAULT
:默认值COLUMN_KEY
:是否为主键/索引(PRI
/UNI
)
- 查询示例:
SELECT COLUMN_NAME, DATA_TYPE, IS_NULLABLE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'your_table';
4. 索引元数据
描述表的索引信息:
STATISTICS
表
关键字段:INDEX_NAME
:索引名称NON_UNIQUE
:是否唯一索引(0=唯一)SEQ_IN_INDEX
:索引中列的顺序CARDINALITY
:索引唯一值数量(用于查询优化)
- 索引效率公式:
选择性计算公式:
$$ \text{选择性} = \frac{\text{CARDINALITY}}{\text{TABLE_ROWS}} $$ - 查询示例:
SELECT INDEX_NAME, COLUMN_NAME, CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_NAME = 'your_table';
5. 权限元数据
描述用户权限信息:
USER_PRIVILEGES
表
存储全局权限,关键字段:GRANTEE
:被授权用户(格式'user'@'host'
)PRIVILEGE_TYPE
:权限类型(如SELECT
,UPDATE
)
SCHEMA_PRIVILEGES
表
存储数据库级权限。- 查询示例:
SELECT * FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE GRANTEE LIKE 'your_user%';
6. 其他关键元数据表
ROUTINES
:存储过程和函数定义。TRIGGERS
:触发器信息。KEY_COLUMN_USAGE
:外键约束关系。
元数据访问方式
所有元数据通过 INFORMATION_SCHEMA
数据库 访问,这是符合 SQL 标准的只读虚拟数据库。例如:
-- 查看所有元数据表列表
SHOW TABLES IN INFORMATION_SCHEMA;-- 查看表结构定义
SHOW CREATE TABLE your_table;
注意事项
- 权限要求:用户需具有
SELECT
权限才能访问INFORMATION_SCHEMA
。 - 动态更新:元数据实时更新,但部分统计字段(如
TABLE_ROWS
)可能为估算值。 - 性能影响:频繁查询元数据可能影响性能,建议缓存结果。
- 存储引擎差异:如
MyISAM
与InnoDB
的TABLE_ROWS
精度不同。
通过元数据,开发者可动态分析数据库结构、优化查询或构建自动化管理工具。