INFORMATION_SCHEMA (或 information_schema) 是一个系统数据库,提供一种近乎标准化的、与 DBMS 无关的视图,用于查看数据库对象的元数据。INFORMATION_SCHEMA 中的视图通常不如常规系统表完善,但工具可以借助它们以跨 DBMS 的方式获取基础信息。INFORMATION_SCHEMA 中各视图的结构和内容应以向后兼容的方式演进,也就是说,只会添加新功能,而不会更改或移除现有功能。从内部实现来看,INFORMATION_SCHEMA 中的视图通常映射到常规系统表,例如 system.columns、system.databases 和 system.tables。
SHOW TABLES FROM INFORMATION_SCHEMA;
-- or:
SHOW TABLES FROM information_schema;┌─name────────────────────┐
│ COLLATIONS │
│ COLUMNS │
│ KEY_COLUMN_USAGE │
│ REFERENTIAL_CONSTRAINTS │
│ SCHEMATA │
| STATISTICS |
│ TABLES │
│ VIEWS │
│ columns │
│ key_column_usage │
│ referential_constraints │
│ schemata │
| statistics |
│ tables │
│ views │
└─────────────────────────┘INFORMATION_SCHEMA 包含以下视图:
出于兼容其他数据库的考虑,还提供了不区分大小写的对应视图,例如 INFORMATION_SCHEMA.columns。这些视图中的所有列也是如此——同时提供了小写 (例如 table_name) 和大写 (TABLE_NAME) 两种形式。
COLUMNS
包含从 system.columns 系统表中读取的列,以及 ClickHouse 不支持或无实际意义 (始终为 NULL) 、但标准要求必须存在的列。
列:
table_catalog(String) — 目前未使用。table_schema(String) — 目前未使用。table_name(String) — 目前未使用。non_unique(Int32) — 目前未使用。index_schema(String) — 目前未使用。index_name(Nullable(String)) — 目前未使用。seq_in_index(UInt32) — 目前未使用。column_name(Nullable(String)) — 目前未使用。collation(Nullable(String)) — 目前未使用。cardinality(Nullable(Int64)) — 目前未使用。sub_part(Nullable(Int64)) — 目前未使用。packed(Nullable(String)) — 目前未使用。nullable(String) — 目前未使用。index_type(String) — 目前未使用。comment(String) — 目前未使用。index_comment(String) — 目前未使用。is_visible(String) — 目前未使用。expression(Nullable(String)) — 目前未使用。
示例
SELECT table_catalog,
table_schema,
table_name,
column_name,
ordinal_position,
column_default,
is_nullable,
data_type,
character_maximum_length,
character_octet_length,
numeric_precision,
numeric_precision_radix,
numeric_scale,
datetime_precision,
character_set_catalog,
character_set_schema,
character_set_name,
collation_catalog,
collation_schema,
collation_name,
domain_catalog,
domain_schema,
domain_name,
column_comment,
column_type
FROM INFORMATION_SCHEMA.COLUMNS
WHERE (table_schema = currentDatabase() OR table_schema = '')
AND table_name NOT LIKE '%inner%'
LIMIT 1
FORMAT Vertical;Row 1:
──────
table_catalog: default
table_schema: default
table_name: describe_example
column_name: id
ordinal_position: 1
column_default:
is_nullable: 0
data_type: UInt64
character_maximum_length: ᴺᵁᴸᴸ
character_octet_length: ᴺᵁᴸᴸ
numeric_precision: 64
numeric_precision_radix: 2
numeric_scale: 0
datetime_precision: ᴺᵁᴸᴸ
character_set_catalog: ᴺᵁᴸᴸ
character_set_schema: ᴺᵁᴸᴸ
character_set_name: ᴺᵁᴸᴸ
collation_catalog: ᴺᵁᴸᴸ
collation_schema: ᴺᵁᴸᴸ
collation_name: ᴺᵁᴸᴸ
domain_catalog: ᴺᵁᴸᴸ
domain_schema: ᴺᵁᴸᴸ
domain_name: ᴺᵁᴸᴸSCHEMATA
包含从 system.databases 系统表读取的列,以及 ClickHouse 中不受支持或没有实际意义 (始终为 NULL) 但标准要求必须存在的列。
列:
catalog_name(String) — 数据库名称。schema_name(String) — 数据库名称。schema_owner(String) — schema 所有者名称,始终为'default'。default_character_set_catalog(Nullable(String)) —NULL,不受支持。default_character_set_schema(Nullable(String)) —NULL,不受支持。default_character_set_name(Nullable(String)) —NULL,不受支持。sql_path(Nullable(String)) —NULL,不受支持。
示例
SELECT catalog_name,
schema_name,
schema_owner,
default_character_set_catalog,
default_character_set_schema,
default_character_set_name,
sql_path
FROM information_schema.schemata
WHERE schema_name ILIKE 'information_schema'
LIMIT 1
FORMAT Vertical;Row 1:
──────
catalog_name: INFORMATION_SCHEMA
schema_name: INFORMATION_SCHEMA
schema_owner: default
default_character_set_catalog: ᴺᵁᴸᴸ
default_character_set_schema: ᴺᵁᴸᴸ
default_character_set_name: ᴺᵁᴸᴸ
sql_path: ᴺᵁᴸᴸTABLES
包含从 system.tables 系统表中读取的各列。
列:
table_catalog(String) — 表所在数据库的名称。table_schema(String) — 表所在数据库的名称。table_name(String) — 表名。table_type(String) — 表类型。可能的值:BASE TABLEVIEWFOREIGN TABLELOCAL TEMPORARYSYSTEM VIEW
table_rows(Nullable(UInt64)) — 总行数。若无法确定,则为 NULL。data_length(Nullable(UInt64)) — 磁盘上数据的大小。若无法确定,则为 NULL。index_length(Nullable(UInt64)) — 主键、次级索引以及所有标记的总大小。table_collation(Nullable(String)) — 表的默认排序规则。始终为utf8mb4_0900_ai_ci。table_comment(Nullable(String)) — 创建表时使用的注释。
示例
SELECT table_catalog,
table_schema,
table_name,
table_type,
table_collation,
table_comment
FROM INFORMATION_SCHEMA.TABLES
WHERE (table_schema = currentDatabase() OR table_schema = '')
AND table_name NOT LIKE '%inner%'
LIMIT 1
FORMAT Vertical;Row 1:
──────
table_catalog: default
table_schema: default
table_name: describe_example
table_type: BASE TABLE
table_collation: utf8mb4_0900_ai_ci
table_comment: VIEWS
包含在使用表引擎 View 时,从 system.tables 系统表中读取的列。
列:
table_catalog(String) — 表所在数据库的名称。table_schema(String) — 表所在数据库的名称。table_name(String) — 表名。view_definition(String) — 视图的SELECT查询。check_option(String) —NONE,不进行检查。is_updatable(Enum8) —NO,视图不可更新。is_insertable_into(Enum8) — 显示所创建的视图是否为 materialized。可能的值:NO— 所创建的视图不是 materialized。YES— 所创建的视图是 materialized。
is_trigger_updatable(Enum8) —NO,触发器不可更新。is_trigger_deletable(Enum8) —NO,触发器不可删除。is_trigger_insertable_into(Enum8) —NO,不会向触发器中插入数据。
示例
CREATE VIEW v (n Nullable(Int32), f Float64) AS SELECT n, f FROM t;
CREATE MATERIALIZED VIEW mv ENGINE = Null AS SELECT * FROM system.one;
SELECT table_catalog,
table_schema,
table_name,
view_definition,
check_option,
is_updatable,
is_insertable_into,
is_trigger_updatable,
is_trigger_deletable,
is_trigger_insertable_into
FROM information_schema.views
WHERE table_schema = currentDatabase()
LIMIT 1
FORMAT Vertical;Row 1:
──────
table_catalog: default
table_schema: default
table_name: mv
view_definition: SELECT * FROM system.one
check_option: NONE
is_updatable: NO
is_insertable_into: YES
is_trigger_updatable: NO
is_trigger_deletable: NO
is_trigger_insertable_into: NOKEY_COLUMN_USAGE
包含 system.tables 系统表中受约束限制的列。
列:
constraint_catalog(String) — 当前未使用。始终为def。constraint_schema(String) — 该约束所属 schema (数据库) 的名称。constraint_name(Nullable(String)) — 约束名称。table_catalog(String) — 当前未使用。始终为def。table_schema(String) — 该表所属 schema (数据库) 的名称。table_name(String) — 具有该约束的表名称。column_name(Nullable(String)) — 具有该约束的列名称。ordinal_position(UInt32) — 当前未使用。始终为1。position_in_unique_constraint(Nullable(UInt32)) — 当前未使用。始终为NULL。referenced_table_schema(Nullable(String)) — 当前未使用。始终为NULL。referenced_table_name(Nullable(String)) — 当前未使用。始终为NULL。referenced_column_name(Nullable(String)) — 当前未使用。始终为NULL。
示例
CREATE TABLE test (i UInt32, s String) ENGINE MergeTree ORDER BY i;
SELECT constraint_catalog,
constraint_schema,
constraint_name,
table_catalog,
table_schema,
table_name,
column_name,
ordinal_position,
position_in_unique_constraint,
referenced_table_schema,
referenced_table_name,
referenced_column_name
FROM information_schema.key_column_usage
WHERE table_name = 'test'
FORMAT Vertical;Row 1:
──────
constraint_catalog: def
constraint_schema: default
constraint_name: PRIMARY
table_catalog: def
table_schema: default
table_name: test
column_name: i
ordinal_position: 1
position_in_unique_constraint: ᴺᵁᴸᴸ
referenced_table_schema: ᴺᵁᴸᴸ
referenced_table_name: ᴺᵁᴸᴸ
referenced_column_name: ᴺᵁᴸᴸREFERENTIAL_CONSTRAINTS
包含有关外键的信息。目前返回空结果 (无行) ,这仅用于与 Tableau Online 等第三方工具保持兼容。
列:
constraint_catalog(String) — 当前未使用。constraint_schema(String) — 当前未使用。constraint_name(Nullable(String)) — 当前未使用。unique_constraint_catalog(String) — 当前未使用。unique_constraint_schema(String) — 当前未使用。unique_constraint_name(Nullable(String)) — 当前未使用。match_option(String) — 当前未使用。update_rule(String) — 当前未使用。delete_rule(String) — 当前未使用。table_name(String) — 当前未使用。referenced_table_name(String) — 当前未使用。
STATISTICS
提供有关表索引的信息。目前会返回空结果 (0 行) ,仅用于兼容 Tableau Online 等第三方工具。
COLLATIONS
提供有关可用排序规则的信息。除 system.collations 中的排序规则外,还包含两个用于兼容 MySQL 的行:utf8mb4_0900_ai_ci — MySQL protocol 在 handshake、SCHEMATA.DEFAULT_COLLATION_NAME 和 TABLES.TABLE_COLLATION 中声明的排序规则 — 以及 binary — MySQL protocol 在结果集元数据中标记到数值列及其他非字符串列上的伪排序规则 — 以便支持 MySQL 的 client 在此视图中查找已声明的排序规则时能够找到它们。
列:
collation_name(String) — 排序规则的名称。character_set_name(Nullable(String)) — 关联的字符集 (utf8mb4_0900_ai_ci对应utf8mb4,binary对应binary,否则为NULL) 。为兼容 MySQL 而提供。id(Nullable(UInt64)) — MySQL 排序规则 ID (utf8mb4_0900_ai_ci为255,binary为63,否则为NULL) 。为兼容 MySQL 而提供。is_default(Nullable(String)) — 该排序规则是否为其字符集的默认排序规则 (两个 MySQL 兼容行均为Yes,否则为NULL) 。为兼容 MySQL 而提供。is_compiled(Nullable(String)) — 该排序规则是否已编译到 server 中 (两个 MySQL 兼容行均为Yes,否则为NULL) 。为兼容 MySQL 而提供。sortlen(Nullable(UInt64)) — 最小排序长度 (utf8mb4_0900_ai_ci为0,binary为1,否则为NULL) 。为兼容 MySQL 而提供。pad_attribute(Nullable(String)) — 填充属性,NO PAD或PAD SPACE(两个 MySQL 兼容行均为NO PAD,否则为NULL) 。为兼容 MySQL 而提供。