INNODB_VIRTUAL表
该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开始计数。BASE_POS
虚拟生成的列所基于的列的顺序位置。
例
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 =InnoDBDEFAULT CHARSET =utf8mb4; mysql>SELECT *FROM INFORMATION_SCHEMA.INNODB_VIRTUALWHERE TABLE_IDIN (SELECT TABLE_IDFROM INFORMATION_SCHEMA.INNODB_TABLESWHERE NAME LIKE "test/t1"); +---------- +------- +---------- + | TABLE_ID | POS | BASE_POS | +---------- +------- +---------- + | 98 | 65538 | 0 | | 98 | 65538 | 1 | +---------- +------- +---------- +
注意
如果将常量值分配给虚拟生成的列,如下表所示,则该列的条目不会出现在
INNODB_VIRTUAL
表中。要显示条目,虚拟生成的列必须具有基本列。CREATE TABLE `t1` ( `a` int(11)DEFAULT NULL, `b` int(11)DEFAULT NULL, `c` int(11)GENERATED ALWAYS AS (5)VIRTUAL )ENGINE =InnoDBDEFAULT CHARSET =utf8mb4;但是,该列的元数据确实出现在
INNODB_COLUMNS
表中。- 您必须具有
PROCESS
查询此表的特权。 - 使用该
INFORMATION_SCHEMA
COLUMNS
表或该SHOW COLUMNS
语句参见有关该表的列的其他信息,包括数据类型和默认值。