文档主页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (美国信纸) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  INFORMATION_SCHEMA INNODB_VIRTUAL 表

28.4.29 INFORMATION_SCHEMA 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) + 2InnoDB 实例中的第一个虚拟生成列始终为数字 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=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_VIRTUAL 表中。要出现条目,虚拟生成列必须具有一个基列。

    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_COLUMNS 表中。

  • 您必须拥有 PROCESS 权限才能查询此表。

  • 使用 INFORMATION_SCHEMA COLUMNS 表或 SHOW COLUMNS 语句来查看有关此表的列的更多信息,包括数据类型和默认值。