该 KEY_COLUMN_USAGE
表描述了哪些键列具有约束条件。这张表不提供关于函数键部分的信息,因为它们是表达式,而该表仅提供关于列的信息。
该 KEY_COLUMN_USAGE
表具有以下列:
-
CONSTRAINT_CATALOG
约束所属的目录的名称。该值始终为
def
。 -
CONSTRAINT_SCHEMA
约束所属的模式(数据库)的名称。
-
CONSTRAINT_NAME
约束的名称。
-
TABLE_CATALOG
表所属的目录的名称。该值始终为
def
。 -
TABLE_SCHEMA
表所属的模式(数据库)的名称。
-
TABLE_NAME
具有约束的表的名称。
-
COLUMN_NAME
具有约束的列的名称。
如果约束是一个外键,那么这就是外键的列,而不是外键引用的列。
-
ORDINAL_POSITION
该列在约束中的位置,而不是该列在表中的位置。列位置从 1 开始编号。
-
POSITION_IN_UNIQUE_CONSTRAINT
对于唯一和主键约束,该列为
NULL
。对于外键约束,该列是被引用的表的键中的序号。 -
REFERENCED_TABLE_SCHEMA
被引用的模式的名称。
-
REFERENCED_TABLE_NAME
被引用的表的名称。
-
REFERENCED_COLUMN_NAME
被引用的列的名称。
假设有两个表 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
表具有两行:
-
一行具有
CONSTRAINT_NAME
='PRIMARY'
,TABLE_NAME
='t1'
,COLUMN_NAME
='s3'
,ORDINAL_POSITION
=1
,POSITION_IN_UNIQUE_CONSTRAINT
=NULL
。对于
NDB
:该值始终为NULL
。 -
一行具有
CONSTRAINT_NAME
='CO'
,TABLE_NAME
='t3'
,COLUMN_NAME
='s2'
,ORDINAL_POSITION
=1
,POSITION_IN_UNIQUE_CONSTRAINT
=1
。