KEY_COLUMN_USAGE - xiaoboluo768/mysql-system-schema GitHub Wiki
- 该表提供查询哪些索引列存在约束条件
- 该表为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表