INFORMATION_SCHEMA
是 MySQL 的一个特殊数据库,它提供了关于其他数据库的信息,包括数据库对象(如表、列、数据类型、访问权限等)的元数据。INFORMATION_SCHEMA
是只读的,不能直接在这个数据库中创建或删除表,但它提供了丰富的视图(views),这些视图允许查询数据库服务器的状态信息、数据库元数据、表元数据、列元数据、索引信息等。
以下是一些 INFORMATION_SCHEMA
中常见的表和视图,以及它们的大致用途:
-
SCHEMATA:提供了关于所有数据库的信息,比如数据库的名称、字符集、排序规则等。
-
TABLES:包含了关于数据库中所有表的信息,比如表名、所属数据库、表类型(BASE TABLE、VIEW等)、行格式、表的创建时间等。
-
COLUMNS:包含了数据库中所有表的列信息,比如列名、数据类型、是否允许为NULL、默认值、字符集等。
-
STATISTICS:包含了关于表索引的信息,比如索引的名称、表名、索引类型(如BTREE)、索引列等,对于优化查询非常有用。
-
VIEWS:提供了数据库中所有视图的信息,比如视图名、定义视图的SQL语句等。
-
ROUTINES:包含了关于存储过程和函数的信息,比如名称、类型(PROCEDURE或FUNCTION)、定义、字符集等。
-
TRIGGERS:提供了关于触发器的信息,包括触发器名称、所属的表、触发事件(INSERT、UPDATE、DELETE)、触发时机(BEFORE或AFTER)等。
-
PARTITIONS:如果表是分区表,这个表将提供关于分区的信息,比如分区类型、分区表达式、每个分区的行数等。
-
TABLE_CONSTRAINTS:提供了关于表约束的信息,比如主键、外键等。
-
KEY_COLUMN_USAGE:这个表描述了表中的键列(包括主键和外键列)的详细信息,比如哪个列是主键的一部分,哪个列是外键并引用了哪个表的哪个列等。
-
REFERENTIAL_CONSTRAINTS:包含了外键约束的详细信息,比如约束名称、引用的表和列等。
使用 INFORMATION_SCHEMA
可以让不直接查询数据表的情况下,获得关于数据库结构的大量信息,这对于数据库管理、优化和监控来说非常有用。例如,可以使用 INFORMATION_SCHEMA
来查找数据库中所有的表,或者检查某个表是否包含特定的列。
- 查看所有表
SELECT
TABLE_SCHEMA,
TABLE_NAME,
TABLE_ROWS
FROM
INFORMATION_SCHEMA.TABLES
WHERE
TABLE_SCHEMA = '你的数据库名';
- 查询所有视图
SELECT
TABLE_NAME,TABLE_SCHEMA,VIEW_DEFINITION
FROM
INFORMATION_SCHEMA.VIEWS
WHERE
TABLE_SCHEMA = '你的数据库名';