KEY_COLUMN_USAGE 视图

KEY_COLUMN_USAGE 视图包含 TABLE_CONSTRAINTS 中的表的各列,这些表作为键受到 PRIMARY KEYFOREIGN KEY 限制条件制约。

架构

INFORMATION_SCHEMA.KEY_COLUMN_USAGE 视图具有如下架构:

列名 数据类型 价值

CONSTRAINT_CATALOG

STRING

限制条件项目名称。

CONSTRAINT_SCHEMA

STRING

限制条件数据集名称。

CONSTRAINT_NAME

STRING

限制条件名称。

TABLE_CATALOG

STRING

受限表的项目名称。

TABLE_SCHEMA

STRING

受限表的数据集名称。

TABLE_NAME

STRING

受限表的名称。

COLUMN_NAME

STRING

受限列的名称。

ORDINAL_POSITION

INT64

列在限制条件键内的序号位置(从 1 开始)。

POSITION_IN_UNIQUE_CONSTRAINT

INT64

对于外键,这是列在主键限制条件内的序号位置(从 1 开始)。对于主键限制条件,此值为 NULL

范围和语法

针对此视图的查询必须包括数据集限定符。对于包含数据集限定符的查询,您必须拥有数据集的权限。如需了解详情,请参阅语法。下表展示了此视图的区域和资源范围:

视图名称 资源范围 区域范围
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.KEY_COLUMN_USAGE; 数据集级 数据集位置
替换以下内容:

  • 可选:PROJECT_ID:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。

对于包含数据集限定符的查询,您必须拥有数据集的权限。对于包含区域限定符的查询,您必须拥有项目的权限。

示例

示例 1:

以下查询展示了数据集中单个表的限制条件:

SELECT *
FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE table_name = TABLE;

请替换以下内容:

  • PROJECT_ID:可选。您的 Cloud 项目的名称。如果未指定,则此命令会使用默认项目。
  • DATASET:您的数据集的名称。
  • TABLE:表格的名称。

与上述查询相反,以下查询展示了单个数据集中所有表的键列使用情况。

SELECT *
FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.KEY_COLUMN_USAGE;

如果表或数据集没有任何限制条件,则查询结果如下所示:

+-----------------------------+
| There is no data to display |
+-----------------------------+
示例 2:

以下 DDL 语句会创建一个主键表和一个外键表。

CREATE TABLE composite_pk (x int64, y string, primary key (x, y) NOT ENFORCED);
CREATE TABLE table composite_fk (x int64, y string, z string,  primary key (x, y)
NOT ENFORCED, CONSTRAINT composite_fk foreign key (z, x)
REFERENCES composite_pk (y, x) NOT ENFORCED);

如果使用示例 1 中的语句查询,查询结果将类似于以下内容。请注意,示例结果中不包含 CONSTRAINT_CATALOGCONSTRAINT_SCHEMA 和重复列。

+---------------------------+--------------+-------------+------------------+-------------------------------+
|     CONSTRAINT_NAME       |  TABLE_NAME  | COLUMN_NAME | ORDINAL_POSITION | POSITION_IN_UNIQUE_CONSTRAINT |
+---------------------------+--------------+-------------+------------------+-------------------------------+
| composite_pk.pk$          | composite_pk | x           | 1                | NULL                          |
| composite_pk.pk$          | composite_pk | y           | 2                | NULL                          |
| composite_fk.pk$          | composite_fk | x           | 1                | NULL                          |
| composite_fk.pk$          | composite_fk | y           | 2                | NULL                          |
| composite_fk.composite_fk | composite_fk | z           | 1                | 2                             |
| composite_fk.composite_fk | composite_fk | x           | 2                | 1                             |
+---------------------------+--------------+-------------+------------------+-------------------------------+