# 26.4.29 信息_SCHEMA INNODB_虚拟表
这INNODB_VIRTUAL
表提供有关的元数据InnoDB
虚拟生成列以及虚拟生成列所基于的列。
一行出现在INNODB_VIRTUAL
虚拟生成列所基于的每一列的表。
这INNODB_VIRTUAL
表有这些列:
TABLE_ID
表示与虚拟列关联的表的标识符;相同的值
INNODB_TABLES.TABLE_ID
.POS
的位置值虚拟生成列.该值很大,因为它对列序列号和序号位置进行了编码。用于计算该值的公式使用按位运算:
((nth virtual generated column for the InnoDB instance + 1) << 16) + the ordinal position of the virtual generated column
例如,如果第一个虚拟生成列在
InnoDB
实例是表的第三列,公式是(0 + 1) << 16) + 2
。中的第一个虚拟生成列InnoDB
实例总是0。作为表中的第三列,虚拟生成列的顺序位置为2。序号位置从0开始计算。基本位置
虚拟生成的列所基于的列的顺序位置。
# 实例
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 |
+----------+-------+----------+
| 98 | 65538 | 0 |
| 98 | 65538 | 1 |
+----------+-------+----------+