MySQL Error number: 3174; Symbol: ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL; SQLSTATE: HY000

文档解释

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),需要合理使用外键和虚拟表列,而不能同时进行添加。

你可能感兴趣的