Skip to content

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表

Clone this wiki locally