24.32.25 INFORMATION_SCHEMA INNODB_SYS_VIRTUALtable
INNODB_SYS_VIRTUALtable 提供有关InnoDB
虚拟生成的列以及虚拟生成的列所基于的列的元数据,等效于InnoDB
数据字典中SYS_VIRTUAL
table 中的信息。
INNODB_SYS_VIRTUAL
table 中的每一行都会出现一行,虚拟生成的列所基于的每一列。
INNODB_SYS_VIRTUALtable 具有以下列:
TABLE_ID
代 table 与虚拟列关联的 table 的标识符;与INNODB_SYS_TABLES.TABLE_ID
相同的值。
POS
虚拟生成的列的位置值。该值很大,因为它会编码列序列号和 Sequences 位置。用于计算值的公式使用按位运算:
((nth virtual generated column for the InnoDB instance + 1) << 16)
+ the ordinal position of the virtual generated column
例如,如果InnoDB
实例中的第一虚拟生成列是 table 的第三列,则公式为(0 + 1) << 16) + 2
。 InnoDB
实例中的第一个虚拟生成的列始终为数字 0.作为 table 中的第三列,虚拟生成的列的 Sequences 位置为 2.Sequences 位置从 0 开始计数。
BASE_POS
虚拟生成的列所基于的列的 Sequences 位置。
Example
mysql> CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
`c` int(11) GENERATED ALWAYS AS (a+b) VIRTUAL,
`h` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_VIRTUAL
WHERE TABLE_ID IN
(SELECT TABLE_ID FROM INFORMATION_SCHEMA.INNODB_TABLES
WHERE NAME LIKE "test/t1");
+----------+-------+----------+
| TABLE_ID | POS | BASE_POS |
+----------+-------+----------+
| 95 | 65538 | 0 |
| 95 | 65538 | 1 |
+----------+-------+----------+
Notes
- 如果将常量值分配给虚拟生成的列,如下 table 所示,则该列的条目不会出现在
INNODB_SYS_VIRTUAL
table 中。要显示条目,虚拟生成的列必须具有基本列。
CREATE TABLE `t1` (
`a` int(11) DEFAULT NULL,
`b` int(11) DEFAULT NULL,
`c` int(11) GENERATED ALWAYS AS (5) VIRTUAL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
但是,此类列的元数据确实出现在INNODB_SYS_COLUMNStable 中。
-
您必须具有PROCESS特权才能查询此 table。
-
使用
INFORMATION_SCHEMA
COLUMNStable 或SHOW COLUMNS语句查看有关此 table 列的其他信息,包括数据类型和默认值。