INNODB_SYS_VIRTUAL table provides
columns and columns upon which virtual generated columns
are based, equivalent to information in the
SYS_VIRTUAL table in the
InnoDB data dictionary.
A row appears in the
for each column upon which a virtual generated column is based.
INNODB_SYS_VIRTUAL table has
An identifier representing the table associated with the virtual column; the same value as
The position value of the virtual generated column. The value is large because it encodes the column sequence number and ordinal position. The formula used to calculate the value uses a bitwise operation:
((nth virtual generated column for the InnoDB instance + 1) << 16) + the ordinal position of the virtual generated column
For example, if the first virtual generated column in the
InnoDBinstance is the third column of the table, the formula is
(0 + 1) << 16) + 2. The first virtual generated column in the
InnoDBinstance is always number 0. As the third column in the table, the ordinal position of the virtual generated column is 2. Ordinal positions are counted from 0.
The ordinal position of the columns upon which a virtual generated column is based.
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 | +----------+-------+----------+
If a constant value is assigned to a virtual generated column, as in the following table, an entry for the column does not appear in the
INNODB_SYS_VIRTUALtable. For an entry to appear, a virtual generated column must have a base column.
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;
However, metadata for such a column does appear in the
You must have the
PROCESSprivilege to query this table.
COLUMNStable or the
SHOW COLUMNSstatement to view additional information about the columns of this table, including data types and default values.