MySQL 8.4 版本說明
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=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
陳述式,以檢視有關此表格欄的其他資訊,包括資料類型和預設值。