# 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 |
+----------+-------+----------+

# 笔记

  • 如果将常量值指定给虚拟生成列,如下表所示,列的条目不会出现在INNODB_虚拟桌子要显示条目,虚拟生成的列必须具有基列。

    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_列桌子

  • 你一定有过程查询此表的权限。

  • 使用信息模式 桌子还是桌子显示列语句以查看有关此表的列的其他信息,包括数据类型和默认值。