information_schema 是 MySQL 中的一个特殊数据库,它提供了关于 MySQL 服务器中所有数据库、表、列、索引、存储过程、函数、触发器等对象的元数据信息。information_schema 是一个只读数据库,主要用于查询数据库的结构信息,而不是存储用户数据。
information_schema 的功能分析
1. 元数据查询
information_schema 主要用于查询数据库的元数据,包括但不限于:
数据库信息:列出所有数据库及其相关信息。
表信息:列出数据库中的所有表及其相关信息。
列信息:列出表中的所有列及其相关信息。
索引信息:列出表的所有索引及其相关信息。
存储过程和函数信息:列出数据库中的所有存储过程和函数及其相关信息。
视图信息:列出数据库中的所有视图及其相关信息。
用户权限信息:列出用户的权限信息。
2. 主要表介绍
以下是 information_schema 中一些主要表的功能介绍:
SCHEMATA:列出所有数据库的信息,包括数据库名、默认字符集和排序规则等。
TABLES:列出数据库中的所有表的信息,包括表名、表类型、创建选项等。
COLUMNS:列出表中的所有列的信息,包括列名、数据类型、是否允许空值、默认值等。
STATISTICS:列出表的所有索引的信息,包括索引名、索引类型、是否唯一等。
VIEWS:列出数据库中的所有视图的信息,包括视图定义等。
ROUTINES:列出数据库中的所有存储过程和函数的信息,包括过程或函数名、参数等。
USER_PRIVILEGES:列出用户的权限信息,包括用户可以执行的操作等。
3. 示例查询
以下是一些基本的查询示例,展示如何使用 information_schema:
列出所有数据库:
SELECT schema_name
FROM information_schema.SCHEMATA;
列出特定数据库中的所有表:(不带条件所有库中所有表)
SELECT table_name
FROM information_schema.TABLES
WHERE table_schema = 'your_database_name';
列出特定表的所有列:
SELECT column_name
FROM information_schema.COLUMNS
WHERE table_schema = 'your_database_name'
AND table_name = 'your_table_name';
列出特定表的所有索引:
SELECT routine_name, routine_type
FROM information_schema.ROUTINES
WHERE routine_schema = 'your_database_name';
列出用户的权限:
SELECT privilege_type
FROM information_schema.USER_PRIVILEGES
WHERE grantee = 'your_username';
为什么 information_schema 不能被删除或修改
只读特性:information_schema 是只读的,任何尝试修改或删除其内容的操作都会被 MySQL 阻止。
动态生成:information_schema 中的数据是动态生成的,不是物理存储的数据,而是从 MySQL 服务器内部状态中动态获取的数据视图。
系统重要性:information_schema 对于 MySQL 的正常运行至关重要,因此不允许用户直接修改或删除。
查看数据库所有表的table_rows/data_leangth/index_length