`information_schema.COLUMNS_EXTENSIONS` 表是 MySQL 8.0.22 及以上版本中引入的一个元数据表,用于存储与表列相关的扩展属性。这些属性主要用于存储引擎级别的信息,例如 InnoDB 存储引擎的列属性。下面是对该表的详细解释:
下面是 `information_schema.COLUMNS_EXTENSIONS` 表的主要字段及其含义:
| 字段名 | 数据类型 | 描述 | |----------------------|--------------------|--------------------------------------------------------------| | TABLE_CATALOG | varchar(64) | 数据库的目录名,通常为 `def`。 | | TABLE_SCHEMA | varchar(64) | 表所属的数据库名称。 | | TABLE_NAME | varchar(64) | 表的名称。 | | COLUMN_NAME | varchar(64) | 列的名称。 | | ENGINE_ATTRIBUTE | json | 存储引擎级别的属性,以 JSON 格式存储。 | | SECONDARY_ENGINE_ATTRIBUTE | json | 辅助存储引擎级别的属性,以 JSON 格式存储。 |
- **`TABLE_CATALOG`**: 数据库的目录名,通常为 `def`。 - **`TABLE_SCHEMA`**: 表所属的数据库名称。 - **`TABLE_NAME`**: 表的名称。 - **`COLUMN_NAME`**: 列的名称。 - **`ENGINE_ATTRIBUTE`**: 存储引擎级别的属性,以 JSON 格式存储。这些属性可以包含存储引擎特有的列属性,例如 InnoDB 存储引擎的 `generated` 属性。 - **`SECONDARY_ENGINE_ATTRIBUTE`**: 辅助存储引擎级别的属性,以 JSON 格式存储。这个字段主要用于存储与辅助存储引擎相关的属性。
以下是一些使用 `information_schema.COLUMNS_EXTENSIONS` 表的示例查询:
1. **获取特定数据库中所有表的列扩展属性**:
SELECT TABLE_NAME, COLUMN_NAME, ENGINE_ATTRIBUTE
FROM information_schema.COLUMNS_EXTENSIONS
WHERE TABLE_SCHEMA = 'your_database_name';
2. **获取特定表的所有列扩展属性**:
SELECT TABLE_NAME, COLUMN_NAME, ENGINE_ATTRIBUTE
FROM information_schema.COLUMNS_EXTENSIONS
WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'your_table_name';
3. **获取特定列的扩展属性**:
SELECT TABLE_NAME, COLUMN_NAME, ENGINE_ATTRIBUTE
FROM information_schema.COLUMNS_EXTENSIONS
WHERE TABLE_SCHEMA = 'your_database_name' AND TABLE_NAME = 'your_table_name' AND COLUMN_NAME = 'your_column_name';
注意事项
- `information_schema` 是一个只读模式的数据库,不能对其进行修改。 - 查询 `information_schema` 通常不需要锁定表,因此性能影响较小。 - 在查询 `information_schema` 时,确保替换 `'your_database_name'`, `'your_table_name'`, 和 `'your_column_name'` 为您具体的数据库、表和列名。
### 示例 JSON 结构 假设您正在查询 InnoDB 存储引擎的表,以下是一个可能的 `ENGINE_ATTRIBUTE` 的 JSON 结构示例:
{
"generated": "STORED",
"expression": "col1 * col2",
"version": 1
}
在这个示例中,`generated` 属性指示该列是一个生成列,`expression` 属性定义了生成列的表达式,而 `version` 属性表示生成列定义的版本。
`information_schema.COLUMNS_EXTENSIONS` 表提供了有关表列的存储引擎级别属性的信息。这些信息对于理解存储引擎如何处理特定列以及利用存储引擎的高级功能非常有用。