-
Notifications
You must be signed in to change notification settings - Fork 111
KEY_COLUMN_USAGE
xiaoboluo768 edited this page Jun 7, 2020
·
2 revisions
- 该表提供查询哪些索引列存在约束条件
- 该表为Memory引擎临时表
- 表定义语句
CREATE TEMPORARY TABLE `KEY_COLUMN_USAGE` (
`CONSTRAINT_CATALOG` varchar(512) NOT NULL DEFAULT '',
`CONSTRAINT_SCHEMA` varchar(64) NOT NULL DEFAULT '',
`CONSTRAINT_NAME` varchar(64) NOT NULL DEFAULT '',
`TABLE_CATALOG` varchar(512) NOT NULL DEFAULT '',
`TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
`TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
`COLUMN_NAME` varchar(64) NOT NULL DEFAULT '',
`ORDINAL_POSITION` bigint(10) NOT NULL DEFAULT '0',
`POSITION_IN_UNIQUE_CONSTRAINT` bigint(10) DEFAULT NULL,
`REFERENCED_TABLE_SCHEMA` varchar(64) DEFAULT NULL,
`REFERENCED_TABLE_NAME` varchar(64) DEFAULT NULL,
`REFERENCED_COLUMN_NAME` varchar(64) DEFAULT NULL
) ENGINE=MEMORY DEFAULT CHARSET=utf8
- 表字段含义
- CONSTRAINT_CATALOG:约束登记名称,该列值总是为def
- CONSTRAINT_SCHEMA:约束所在的数据库名
- CONSTRAINT_NAME:约束名称
- TABLE_CATALOG:约束所在的表的登记名称,该列值总是为def
- TABLE_SCHEMA:约束所在的数据库名
- TABLE_NAME:约束所在的表名
- COLUMN_NAME:约束所在的列名(索引列)
- ORDINAL_POSITION:约束索引列在约束内的位置顺序(不是列在表内的位置顺序)。列位置顺序从1开始编号
- POSITION_IN_UNIQUE_CONSTRAINT:对于唯一主键约束,POSITION_IN_UNIQUE_CONSTRAINT的值为NULL。 对于外键约束,它表示被外键引用列在其所在表中的索引中的位置顺序
- REFERENCED_TABLE_SCHEMA:约束引用表所在的数据库名称
- REFERENCED_TABLE_NAME:约束所引用表的名称
- REFERENCED_COLUMN_NAME:约束所引用列的名称
- 表记录内容示例
admin@localhost : information_schema 05:52:31> select * from KEY_COLUMN_USAGE where TABLE_NAME='sbtest1' limit 1\G;
*************************** 1. row ***************************
CONSTRAINT_CATALOG: def
CONSTRAINT_SCHEMA: sbtest
CONSTRAINT_NAME: PRIMARY
TABLE_CATALOG: def
TABLE_SCHEMA: sbtest
TABLE_NAME: sbtest1
COLUMN_NAME: id
ORDINAL_POSITION: 1
POSITION_IN_UNIQUE_CONSTRAINT: NULL
REFERENCED_TABLE_SCHEMA: NULL
REFERENCED_TABLE_NAME: NULL
REFERENCED_COLUMN_NAME: NULL
1 row in set (0.00 sec)
- 如果约束条件是外键的,则那么该表中查询到的就是外键列(外键索引列),而没有记录外键关联关系。假设有两个表名为t1和t3,其定义如下:
CREATE TABLE t1
(
s1 INT,
s2 INT,
s3 INT,
PRIMARY KEY(s3)
) ENGINE=InnoDB;
CREATE TABLE t3
(
s1 INT,
s2 INT,
s3 INT,
KEY(s1),
CONSTRAINT CO FOREIGN KEY (s2) REFERENCES t1(s3)
) ENGINE=InnoDB;
# 对于这两个表,KEY_COLUMN_USAGE表中会记录如下两行约束信息,其中t1表的约束是主键,t3表的约束是外键:
CONSTRAINT_NAME ='PRIMARY',TABLE_NAME ='t1',COLUMN_NAME ='s3',ORDINAL_POSITION = 1,POSITION_IN_UNIQUE_CONSTRAINT = NULL
CONSTRAINT_NAME ='CO',TABLE_NAME ='t3',COLUMN_NAME ='s2',ORDINAL_POSITION = 1,POSITION_IN_UNIQUE_CONSTRAINT = 1
上一篇:GLOBAL_STATUS、GLOBAL_VARIABLES、SESSION_STATUS、SESSION_VARIABLES表 |下一篇:OPTIMIZER_TRACE表
- 验证、测试、整理:罗小波
- QQ:309969177
- 提示:本系列文章的主体结构遵循Oracle MySQL 官方 5.7 手册中,关于information_schema、mysql schema、performance_schema、sys schema的章节结构体系,并额外添加了一些验证、测试数据。鉴于本人精力和能力有限,难免出现一些纰漏,欢迎大家踊跃指正!