Error number: 3174; Symbol: ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL; SQLSTATE: HY000
Message: Cannot add foreign key on the base column of indexed virtual column.
错误说明
MySQL错误3174(ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL)是MySQL中的一个SQLSTATE错误(HY000),其指出在添加了保留虚拟表列的外键之后,MySQL不能添加一个外键列到实际的表中。外键列必须是表中存在的,非虚拟的一列。在加外键的过程中,这类错误提醒用户,不能将外键添加到实际表中,但仍可将外键添加到虚拟表中,但绝不可同时进行。
常见案例
在MySQL中,ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL错误通常发生在建立表完成之后,又试图添加外键列到该表中,而该表中已存在保留虚拟表列的情况。例如,我们尝试在一个表中添加外键列(名为“foreign_column”),其中该表中已存在保留的虚拟列:
CREATE TABLE mytable (
id INT NOT NULL,
virtual_column INT AS (1) VIRTUAL
FOREIGN KEY (foreign_column) REFERENCES other_table (other_column)
);
在执行此SQL语句时,将收到MySQL错误3174: ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL,指出MySQL不允许在添加外键的情况下,将外键添加到已有保留虚拟表列的存在的表中。
解决方法
可以通过多种方式来解决MySQL错误3174(ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL)。
首先,用户可以创建一个外键列到有虚拟表列的表,但只有当那个外键列被添加到虚拟表列中,而不是实际表列时,才可以。所以,可以尝试以下语句来处理这个错误:
CREATE TABLE mytable (
id INT NOT NULL,
virtual_column INT AS (1) VIRTUAL,
foreign_column INT AS (foreign_column) VIRTUAL
FOREIGN KEY (foreign_column) REFERENCES other_table (other_column)
);
另一种可以解决这个错误的方法是,可以尝试先添加外键,然后再添加虚拟表列,如下所示
CREATE TABLE mytable (
id INT NOT NULL,
foreign_column INT,
FOREIGN KEY (foreign_column) REFERENCES other_table (other_column),
virtual_column INT AS (1) VIRTUAL
);
综上,要解决MySQL错误3174(ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL),需要合理使用外键和虚拟表列,而不能同时进行添加。