MySQL系统表相关SQL

本文详细介绍了如何使用SQL查询MySQL系统表以获取表结构、字段信息、键值和约束,以及索引详情。通过`information_schema`库的多个表,如TABLES、COLUMNS、KEY_COLUMN_USAGE和TABLE_CONSTRAINTS,可以获取到数据库的全面信息,包括表类型、引擎、字段类型、索引类型等。同时,文章提到了SHOW命令的常见用法,如查询数据库、表信息和索引。
摘要由CSDN通过智能技术生成

一、查询表结构

1 : SQL

查询数据库中所有表信息,包含视图等。

select * from information_schema.TABLES where TABLE_SCHEMA  = '数据库名';

查询单个表信息

select * from information_schema.TABLES where TABLE_SCHEMA  = '数据库名' and table_type = 'BASE TABLE';
2 : 字段说明
字段说明
TABLE_CATALOG数据表登记⽬录
TABLE_SCHEMA数据表所属的数据库名
TABLE_NAME表名称
TABLE_TYPE表类型 [system view | base table]
ENGINE使⽤的数据库引擎 [MyISAM | CSV | InnoDB]
VERSION版本,默认值10
ROW_FORMAT⾏格式 [Compact | Dynamic | Fixed]
TABLE_ROWS表里所存多少行数据
AVG_ROW_LENGTH平均行长度
DATA_LENGTH数据长度
MAX_DATA_LENGTH最大数据长度
INDEX_LENGTH索引长度
DATA_FREE空间碎片
AUTO_INCREMENT做自增主键的自动增量当前值
CREATE_TIME表的创建时间
UPDATE_TIME表的更新时间
CHECK_TIME表的检查时间
TABLE_COLLATION表的字符校验编码集
CHECKSUM校验和
CREATE_OPTIONS创建选项
TABLE_COMMENT表的注释、备注

二、查询表字段

1 : SQL

查询数据库中所有表字段信息,包含视图等。

select * from information_schema.COLUMNS where TABLE_SCHEMA  = '数据库名' ;

查询单个表或视图字段信息。

select * from information_schema.COLUMNS where TABLE_SCHEMA  = '数据库名' and TABLE_NAME = '表名';
2 : 字段说明
字段说明
TABLE_CATALOG数据表登记⽬录
TABLE_SCHEMA数据表所属的数据库名
TABLE_NAME表名称
COLUMN_NAME列名
ORDINAL_POSITION列标识号,即字段在表中第几列
COLUMN_DEFAULT列的默认值
IS_NULLABLE字段是否可以为空,如果列允许 null,那么该列返回 yes。否则,返回 no
DATA_TYPE数据类型
CHARACTER_MAXIMUM_LENGTH以字符为单位的最大长度,适于二进制数据、字符数据,或者文本和图像数据。否则,返回 null。
CHARACTER_OCTET_LENGTH以字节为单位的最大长度,适于二进制数据、字符数据,或者文本和图像数据。否则,返回 null。
NUMERIC_PRECISION数据精度。近似数字数据、精确数字数据、整型数据或货币数据的精度。否则,返回 null。
NUMERIC_SCALE数据规模。近似数字数据、精确数字数据、整数数据或货币数据的小数位数。否则,返回 null。
DATETIME_PRECISIONdatetime 及 sql-92 interval 数据类型的子类型代码。对于其它数据类型,返回 null。
CHARACTER_SET_NAME字符集名称。如果该列是字符数据或 text 数据类型,那么为字符集返回唯一的名称。否则,返回 null。
COLLATION_NAME字符集校验名称。如果列是字符数据或 text 数据类型,那么为排序次序返回唯一的名称。否则,返回 null。
COLUMN_TYPE列类型
COLUMN_KEY关键列 [NULL | MUL | PRI]
EXTRA额外描述 [NULL | on update CURRENT_TIMESTAMP | auto_increment]
PRIVILEGES字段操作权限 [select | select,insert,update,references]
COLUMN_COMMENT字段描述、注释
GENERATION_EXPRESSION组合字段的公式

三、查询表键值

1 : SQL

查询数据库中所有表键值。

select * from information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '数据库名';

查询单个表键值

select * from information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = '数据库名' and TABLE_NAME = '表名';
2 : 字段说明
字段说明
CONSTRAINT_CATALOG约束登记目录。键值所属的目录名称,该值始终为def
CONSTRAINT_SCHEMA约束所属的数据库名称
CONSTRAINT_NAME约束的名称
TABLE_CATALOG数据表登记目录。键值所在表所属的目录名称,该值始终为def
TABLE_SCHEMA键值所在表的数据库名称
TABLE_NAME键值所属的表名
COLUMN_NAME键值所属的列名。如果是外键约束,名称是该外键列,不是所引用的列
ORDINAL_POSITION约束中列的位置,约束列在约束中的位置,从1开始标记。单个约束为1,组合约束由左至右从1标记
POSITION_IN_UNIQUE_CONSTRAINT如果是唯一或者主键约束,值为NULL,如果是外键约束,该值为被引用表的列的位置
REFERENCED_TABLE_SCHEMA外键依赖的数据库名
REFERENCED_TABLE_NAME外键依赖的表名
REFERENCED_COLUMN_NAME外键依赖的列名

四、查询表Check约束

1 : SQL

查询数据库中的主键约束、外键约束、唯一约束、check约束。

select * from information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = '数据库名';

查询单个表约束信息

select * from information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA = '数据库名' and TABLE_NAME = '表名';
2 : 字段说明
字段说明
CONSTRAINT_CATALOG约束登记目录
CONSTRAINT_SCHEMA约束所属的数据库名
CONSTRAINT_NAME约束的名称
TABLE_SCHEMA约束依赖表所属的数据库名(一般与CONSTRAINT_SCHEMA相同)
TABLE_NAME约束所属的表名
CONSTRAINT_TYPE约束类型 [primary key | foreign key | unique | check ]

五、查询表索引

1 : SQL

查询数据库中的表索引信息。

select * from information_schema.STATISTICS WHERE TABLE_SCHEMA = '数据库名';

查询单个表索引信息

select * from information_schema.STATISTICS WHERE TABLE_SCHEMA = '数据库名' and TABLE_NAME = '表名';
2 : 字段说明
字段说明
TABLE_CATALOG数据表登记目录。包含索引的表所属的目录的名称。 该值始终为def
TABLE_SCHEMA索引所属表的数据库名
TABLE_NAME索引所属的表名
NON_UNIQUE索引不唯一标识。索引字段值不能重复,则为0;能重复,则为1
INDEX_SCHEMA索引所属的数据库名 (一般与TABLE_SCHEMA相同)
INDEX_NAME索引名称。如果是主键,则始终为PRIMARY
SEQ_IN_INDEX索引中的列序列号,索引列在索引中的位置,从1开始标记。单个索引为1,组合索引由左至右从1标记
COLUMN_NAME索引列的列名
COLLATION校对。列在索引中排序方式:A(升序),D(降序),NULL(未排序)
CARDINALITY基数(一般与该表的数据行数相同)。估计索引中唯一值的数量,该值不一定精确
SUB_PART索引前缀。 如果列仅被部分索引,则索引字符的数量,如果整列被索引,则为NULL
PACKED指示密钥的打包方式。 默认为NULL
NULLABLE列是否可能包含NULL值,是则 YES,否则 “”
INDEX_TYPE索引类型 [BTREE | HASH | FULLTEXT | RTREE ],一般设置为BTREE(平衡树索引)
COMMENT有关未在其自己的列中描述的索引的信息
INDEX_COMMENT索引注释、备注

六、其他

1 : SHOW相关用法
SHOW DATABASES
查询MySQL Server上的数据库。
SHOW TABLES FROM db_name
查询数据库(db_name)中的表名称。
SHOW TABLE STATUS FROM db_name
查询数据库(db_name)的表信息,比较详细。
SHOW COLUMNS FROM tb_name FROM db_name
SHOW FIELDS FROM tb_name FROM db_name
查询数据库(db_name)的表(tb_name)的列信息。
DESCRIBE tb_name col_name
需先选择数据库,查询表(tb_name)的列(col_name)信息。
SHOW FULL COLUMNS FROM tb_name FROM db_name
SHOW FULL FIELDS FROM tb_name FROM db_name
查询数据库(db_name)的表(tb_name)的列信息,比较详细。
SHOW INDEX FROM tb_name FROM db_name
查询数据库(db_name)的表(tb_name)的索引信息。
SHOW STATUS
查询MySQL Server的状态信息。
SHOW VARIABLES
查询MySQL Server系参数值。
SHOW PROCESSLIST
查看当前MySQL查询进程。
SHOW GRANTS FOR user
查询用户(user)的授权命令。

有什么不对的还望指正,书写不易,觉得有帮助就点个赞吧!☺☺☺

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

message丶小和尚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值