mysql中information_schema是什么_mysql信息库作用说明

来源:这里教程网 时间:2026-02-28 20:31:11 作者:

information_schema 是 MySQL 自带的一个系统数据库,它不存业务数据,而是专门用来存放“关于数据库的数据”——也就是元数据。

它是 MySQL 的数据字典

所有数据库、表、列、索引、视图、存储过程、用户权限等结构信息,都动态记录在这里。比如你执行 SHOW DATABASESSHOW COLUMNS FROM t1,底层其实就是在查 information_schema 里的对应视图。

SCHEMATA 表:列出所有数据库名、字符集、排序规则 TABLES 表:包含每个表的类型(BASE TABLE / VIEW)、引擎、行数估算、创建时间 COLUMNS 表:详细描述每张表每一列的名称、数据类型、是否允许 NULL、默认值、字符长度等 STATISTICS 表:提供索引名称、字段顺序、是否唯一、是否为主键等信息 ROUTINES 和 VIEWS 表:分别记录存储过程/函数和视图的定义与参数

它完全只读且动态生成

information_schema 中的“表”实际是内存中的只读视图,没有对应的磁盘文件,也不支持 INSERT、UPDATE、DELETE 操作。每次查询时,MySQL 实时从内部结构组装结果,所以内容始终与当前实例状态一致。

新建一张表后,立刻能在 information_schema.TABLES 中查到 删掉某个用户权限,information_schema.ROLE_TABLE_GRANTS 或相关权限表也会同步更新 重启 MySQL 不影响其可用性,因为它不是靠持久化文件加载,而是运行时构建

它是 DBA 和开发常用的信息入口

很多运维脚本、建模工具、权限审计、SQL 审核系统都依赖它自动发现结构。例如:

查出某库中所有 VARCHAR(255) 的字段:SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE DATA_TYPE='varchar' AND CHARACTER_MAXIMUM_LENGTH=255 AND TABLE_SCHEMA='mydb' 找出没建索引的表:SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA='mydb' AND TABLE_ROWS > 1000 AND TABLE_NAME NOT IN (SELECT DISTINCT TABLE_NAME FROM information_schema.STATISTICS WHERE TABLE_SCHEMA='mydb') 批量生成建表语句或字段注释文档,也常从 COLUMNS + TABLES 关联提取

注意几个关键点

虽然功能强大,但使用时需留意:

查询 performance 开销略高,尤其在库表数量极大时,避免在高频事务中反复扫描 部分字段(如 TABLE_ROWS)是估算值,InnoDB 下不一定精确 查看 VIEWS、TRIGGERS 等需要对应权限(如 SHOW VIEW),否则返回空结果 它不包含 MySQL 配置参数或运行状态指标——那些属于 performance_schema 或 sys schema 的范畴

相关推荐