MySQL 元数据学习笔记

MySQL 元数据(metadata),也称为数据字典(data dictionary)或系统目录(system catalog),是指描述数据库中存储的数据及其结构、约束和其它相关信息的数据集合。

1. 常用的元数据表

1.1. information_schema.COLUMNS

该表包含了所有表的字段信息,如列名、数据类型、默认值、是否允许 NULL 值等。

例如,查询某个表的字段信息:

sqlCopy Code
SELECT column_name, data_type, is_nullable FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'mydatabase' AND TABLE_NAME = 'mytable';

1.2. information_schema.TABLES

该表包含了所有表的信息,如表名、表类型、引擎类型等。

例如,查询某个数据库中的所有表:

sqlCopy Code
SELECT TABLE_NAME, TABLE_TYPE, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'mydatabase';

1.3. information_schema.KEY_COLUMN_USAGE

该表包含了所有索引字段的信息,如索引名、字段名称、索引类型等。

例如,查询某个索引的字段信息:

sqlCopy Code
SELECT COLUMN_NAME, INDEX_NAME, INDEX_TYPE FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'mydatabase' AND TABLE_NAME = 'mytable' AND INDEX_NAME = 'myindex';

2. 实例

假设我们有一个名为 employees 的数据库,其中有一张名为 departments 的表,我们可以通过以下 SQL 语句查询该表的字段信息:

sqlCopy Code
SELECT column_name, data_type, is_nullable FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments';

查询结果如下:

Copy Code
+-------------+-----------+-------------+ | column_name | data_type | is_nullable | +-------------+-----------+-------------+ | dept_no | char(4) | NO | | dept_name | varchar(40) | NO | +-------------+-----------+-------------+

我们也可以通过以下 SQL 语句查询该数据库中的所有表并输出其行数:

sqlCopy Code
SELECT TABLE_NAME, TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'employees';

查询结果如下:

Copy Code
+--------------------+------------+ | TABLE_NAME | TABLE_ROWS | +--------------------+------------+ | departments | 999 | | dept_emp | 331603 | | dept_manager | 24 | | employees | 300024 | | salaries | 2844047 | | titles | 443308 | +--------------------+------------+

最后,我们可以通过以下 SQL 语句查询某个索引的字段信息:

sqlCopy Code
SELECT COLUMN_NAME, INDEX_NAME, INDEX_TYPE FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = 'employees' AND TABLE_NAME = 'departments' AND INDEX_NAME = 'dept_name';

查询结果如下:

Copy Code
+-------------+-----------+------------+ | COLUMN_NAME | INDEX_NAME | INDEX_TYPE | +-------------+-----------+------------+ | dept_name | dept_name | BTREE | +-------------+-----------+------------+

以上就是 MySQL 元数据的一些简单介绍和实例。