• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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_SCHEMACOLUMNS表或该SHOW COLUMNS语句参见有关该表的列的其他信息,包括数据类型和默认值。

    上篇:INNODB_TRX表