1.information_schema
数据库的系统表
系统表 | 说明 |
---|---|
schemata |
存储数据库的信息,包括名称、字符集、排序规则。 |
tables |
提供数据库中各个表的信息,包括表类型(如 BASE TABLE 、VIEW)、存储引擎、行格式、行数、创建时间等信息。 |
columns |
存储关于每个表的列的信息,包括列名、数据类型、是否允许 NULL 、默认值等信息。 |
statistics |
包含关于表索引的信息,列出每个索引的字段、索引类型(如 BTREE)、唯一性等信息。 |
character_sets |
列出服务器支持的字符集及其默认编码。 |
collations |
提供字符集排序规则的信息,包括每种字符集支持的排序规则及其属性。 |
collation_character_set_applicability |
描述哪些排序规则应用于哪些字符集。 |
user_privileges |
列出每个用户的全局权限,这些权限被定义在 mysql 数据库的 user 表里。 |
table_privileges |
列出授予用户或角色的表级别权限。 |
column_privileges |
列出授予用户或角色的列级别权限。 |
triggers |
包含所有触发器的信息,包括触发器名、关联的表、事件(如 INSERT 、UPDATE 、DELETE)、定义和启用状态。 |
views |
存储视图的信息,包括定义视图的原始 SELECT 语句和安全依赖。 |
routines |
存储存储过程和函数的信息,包括参数、返回类型、创建者等信息。 |
schema_privileges |
描述授予用户或角色的数据库级别权限。 |
engines |
列出数据库引擎的信息,包括引擎名称、支持情况和注释。 |
table_constraints |
存储表约束的信息,包括约束类型(如 PRIMARY KEY 、FOREIGN KEY)、约束名称和约束状态。 |
key_column_usage |
含有约束中所涉及的表列的信息,用于定义主键和外键的关系。 |
1.1 tables
表的字段
字段名 | 字段类型 | 取值范围 | 含义 |
---|---|---|---|
table_catalog |
varchar(512) |
通常为常量值 'def' |
目录名称,MySQL 总是返回 def |
table_schema |
varchar(64) |
存储数据库的名称 | 数据库名称 |
table_name |
varchar(64) |
数据库中表的名称 | 表名称 |
table_type |
varchar(64) |
'BASE TABLE' , 'VIEW' , 'SYSTEM VIEW' |
指示表的类型,可以是基表、视图或系统视图 |
engine |
varchar(64) |
存储引擎名称如 InnoDB , MyISAM 等 |
表所使用的存储引擎 |
version |
bigint |
整数值 | 表的版本号,通常用于标识表结构定义的更改次数 |
row_format |
varchar(64) |
'Fixed' , 'Dynamic' , 'Compressed' , 'Redundant' , 'Compact' |
表的行格式,决定数据在表内的物理存储方式 |
table_rows |
bigint |
表中行数 | 表的预计行数,具体数量可能依赖于统计信息的更新频率 |
avg_row_length |
bigint |
平均行长度 | 表数据文件中每行的平均长度(字节) |
data_length |
bigint |
数据部分长度(字节) | 表的数据长度,单位为字节 |
max_data_length |
bigint |
最大数据部分长度(字节) | 表可存储的最大数据量,单位为字节 |
index_length |
bigint |
索引部分长度(字节) | 表的索引占用空间大小,单位为字节 |
data_free |
bigint |
空闲空间大小(字节) | 表中的未用数据空间,单位为字节,是表空间效率的一个指标 |
auto_increment |
bigint |
下一个自增值 | 下一个自动递增值(如果适用) |
create_time |
datetime |
表创建时间 | 表的创建时间 |
update_time |
datetime |
表更新时间 | 表结构的最近更新时间 |
check_time |
datetime |
检查表的时间 | 表的最后一次检查时间 |
table_collation |
varchar(32) |
排序规则名称 | 表级的字符集排序规则 |
checksum |
bigint (null) |
表的校验和 | 表的校验和值,用于数据一致性验证(可能为 NULL ) |
create_options |
varchar(128) |
其他创建选项 | 与表创建相关的具体选项,逐个用空格分隔 |
table_comment |
varchar(2048) |
自定义评论 | 对表的注释或描述信息 |
1.2 columns 表的字段
字段名 | 字段类型 | 取值范围 | 含义 |
---|---|---|---|
table_catalog |
varchar(512) |
通常为常量值 'def' |
目录名称,MySQL 中通常为 def |
table_schema |
varchar(64) |
数据库名称 | 表所在的数据库名称 |
table_name |
varchar(64) |
表名称 | 表的名称 |
column_name |
varchar(64) |
列名称 | 列的名称 |
ordinal_position |
bigint |
从 1 开始的整数值 | 列在表中的位置,从 1 开始 |
column_default |
longtext |
列的默认值或 NULL |
列的默认值,如果没有定义默认值则为 NULL |
is_nullable |
varchar(3) |
'YES' 或 'NO' |
指示列是否允许为 NULL ,YES 表示可以为 NULL ,NO 表示不可以 |
data_type |
varchar(64) |
列的数据类型 | 列的数据类型,如 int , varchar , date 等 |
character_maximum_length |
bigint |
字符串类型的最大长度(字符) | 对于字符数据类型,表示最大字符长度,如果适用,则为整数值;否则为 NULL |
character_octet_length |
bigint |
字符串类型的最大长度(字节) | 对于字符数据类型,表示最大字节长度,如果适用,则为整数值;否则为 NULL |
numeric_precision |
bigint |
数字列的精度值 | 对于数值数据类型,表示数值精度;否则为 NULL |
numeric_scale |
bigint |
数字列的小数位数 | 对于数值数据类型,表示小数位数;否则为 NULL |
datetime_precision |
bigint |
时间列的秒小数位数 | 对于时间数据类型,表示秒的小数位数;否则为 NULL |
character_set_name |
varchar(64) |
列使用的字符集名称 | 对于字符数据类型,表示使用的字符集;否则为 NULL |
collation_name |
varchar(64) |
列使用的排序规则名称 | 对于字符数据类型,表示使用的排序规则;否则为 NULL |
column_type |
longtext |
列类型定义字符串 | 列的完整类型定义字符串,包括显示宽度、数字精度及可选的 UNSIGNED 等信息 |
column_key |
varchar(3) |
'PRI' , 'UNI' , 'MUL' , '' |
与索引相关的信息:PRI 表示主键,UNI 表示唯一索引,MUL 表示非唯一索引,'' 表示无索引 |
extra |
varchar(30) |
自动属性信息 | 包含其他信息,如 auto_increment 和 on update CURRENT_TIMESTAMP |
privileges |
varchar(80) |
列级权限的信息 | 指示可以应用于列的权限,如 SELECT , INSERT , UPDATE , REFERENCES |
column_comment |
varchar(1024) |
列的注释 | 列的注释或描述信息 |
generation_expression |
longtext |
生成列的表达式 | 对于生成的列,表示生成该列的表达式;否则为 NULL |
1.2.1 查看某数据库每张表的字段数:
select table_name,count(0)
from information_schema.columns
where table_schema='数据库名'
group by table_name
1.2.2 查看某张表的字段顺序
select column_name,ordinal_position
from information_schema.columns
where table_schema='数据库名'
and table_name='表名'
1.3 statistics
表的字段
字段名 | 字段类型 | 取值范围 | 含义 |
---|---|---|---|
table_catalog |
varchar(512) |
通常为常量值 'def' |
目录名称,MySQL 中通常为 def |
table_schema |
varchar(64) |
数据库名称 | 表所在的数据库名称 |
table_name |
varchar(64) |
表名称 | 索引所在的表的名称 |
non_unique |
bigint |
0 或 1 |
表示索引是否允许重复值,0 表示唯一索引,1 表示非唯一索引 |
index_schema |
varchar(64) |
数据库名称 | 索引所在的数据库名称 |
index_name |
varchar(64) |
索引名称 | 索引的名称 |
seq_in_index |
bigint |
从 1 开始的整数值 | 列在索引中的顺序位置,从 1 开始 |
column_name |
varchar(64) |
列名称 | 包含在索引中的列名 |
collation |
varchar(1) |
A , D , 或 NULL |
索引中列的排序顺序,A 表示升序,D 表示降序,NULL 表示未指定(对于非索引列) |
cardinality |
bigint |
索引基数的估计值 | 索引中唯一值的估计数量,通常用于影响优化器的选择策略 |
sub_part |
bigint |
列的前缀长度(字节)或 NULL |
如果索引仅使用列的一部分,则表示索引的前缀长度;否则为 NULL |
packed |
varchar(10) |
索引是否压缩的信息或 NULL |
如果索引列使用了压缩,则显示相关信息;否则为 NULL |
nullable |
varchar(3) |
'YES' 或 'NO' |
指示列是否允许为 NULL ,YES 表示可以为 NULL ,NO 表示不可以 |
index_type |
varchar(16) |
索引类型名称,如 BTREE , FULLTEXT 等 |
索引使用的数据结构类型 |
comment |
varchar(16) |
索引的注释 | 索引的注释信息 |
index_comment |
varchar(1024) |
详细索引注释信息 | 索引的详细注释信息 |
is_visible |
varchar(3) |
'YES' 或 'NO' |
指示索引是否可见,YES 表示可见,NO 表示不可见(MySQL 8.0 及以上版本支持) |
1.3.1 查看数据库每张表的索引数
select table_name,count(0)
from information_schema.statistics
where table_schema='数据库名'
group by table_name
1.4 routines
表的字段
routines
表包含关于存储过程和函数的信息。
字段名 | 数据类型 | 描述 |
---|---|---|
specific_name |
varchar | 存储过程或函数的特定名称。这在同一数据库中唯一标识例程,尤其在重载情况下。 |
routine_catalog |
varchar | 通常为 NULL,保留以实现 SQL 标准。 |
routine_schema |
varchar | 存储过程或函数所在的数据库名称。 |
routine_name |
varchar | 存储过程或函数的名称。 |
routine_type |
enum | 例程的类型:'PROCEDURE' 或 'FUNCTION'。 |
data_type |
varchar | 函数返回值的数据类型。如果是存储过程,则此字段为 NULL 。 |
character_maximum_length |
bigint | 如果返回类型是字符或二进制类型,则为其最大长度。否则为 NULL 。 |
character_octet_length |
bigint | 字符串数据类型的最大字节长度。如果不是字符串数据类型,则为 NULL 。 |
numeric_precision |
bigint | 如果返回类型是数值数据类型,则为其精度。否则为 NULL 。 |
numeric_scale |
bigint | 如果返回类型是精确数值数据类型(decimal),则为其小数点后的位数。否则为 NULL 。 |
datetime_precision |
bigint | 如果返回类型是 datetime 或时间戳数据类型,则为其精度。否则为 NULL 。 |
character_set_name |
varchar | 如果返回类型是字符数据类型,则为其字符集。否则为 NULL 。 |
collation_name |
varchar | 如果返回类型是字符数据类型,则为其排序规则。否则为 NULL 。 |
dtd_identifier |
longtext | 数据类型描述的内部格式。 |
routine_body |
enum | 永远是 'SQL',表示例程体的类型。 |
routine_definition |
longtext | 例程的定义(CREATE 语句的主体)。如果用户没有权限,则显示为 NULL 。 |
external_name |
varchar | 保留字段,目前未使用。 |
external_language |
varchar | 保留字段,目前未使用。 |
parameter_style |
varchar | 总是 'SQL',表示使用的参数样式。 |
is_deterministic |
enum | 标识例程是否确定性('YES' 或 'NO')。 |
sql_data_access |
enum | 例程的数据操作权限:'CONTAINS SQL', 'NO SQL', 'READS SQL DATA', 'MODIFIES SQL DATA'。 |
sql_path |
varchar | 保留以实现 SQL 标准。通常为 NULL 。 |
security_type |
enum | 例程的安全类型:'DEFINER' 或 'INVOKER'。 |
created |
timestamp | 例程创建的日期和时间。 |
last_altered |
timestamp | 例程最后修改的日期和时间。 |
sql_mode |
varchar | 例程定义中的 SQL 模式。 |
routine_comment |
varchar | 例程的注释。 |
definer |
varchar | 最初定义例程的 MySQL 用户账户。 |
character_set_client |
varchar | 创建例程时的客户端字符集。 |
collation_connection |
varchar | 创建例程时的连接排序规则。 |
database_collation |
varchar | 创建例程时的数据库排序规则。 |
1.5 mysql支持的字符集
select *
from information_schema.character_sets