MySQL Error number: 3108; Symbol: ER_DEPENDENT_BY_GENERATED_COLUMN; SQLSTATE: HY000

文档解释

Error number: 3108; Symbol: ER_DEPENDENT_BY_GENERATED_COLUMN; SQLSTATE: HY000

Message: Column ‘%s’ has a generated column dependency.

Error 3108 (ER_DEPENDENT_BY_GENERATED_COLUMN)

错误说明

Error 3108 (ER_DEPENDENT_BY_GENERATED_COLUMN) 是MySQL的一种可知的错误,它是当一个表格中有一个生成的列,但它依赖于该表格中的另一个生成的列时引发的错误。该错误通常由 SQL 语句的嵌套约束条件引起,例如当使用CHECK / FOREIGN KEY等时。因此,MySQL 将错误 3108 抛出,以提醒您对造成此错误的约束条件所做的任何修改。

常见案例

以下是引发错误 3108 的一个常见用例:

假设您正在尝试创建具有以下两个字段的表:

gene1 int (11) GENERATED ALWAYS AS(gene2 + XXX)

gene2 int (11) GENERATED ALWAYS AS (gene1 + YYY)

在上面的示例中,gene1 和 gene2 同时依赖对方,所以将引发错误 3108。

解决方法

要解决这个错误,需要改变表格的结构,使得没有嵌套的外键和约束条件,以便不会出现错误 3108。 具体来说,您需要更改上面的示例,以创建一个只有一个生成的列的表。例如:

gene2 int (11) GENERATED ALWAYS AS (XXX)

或者,您可以像这样更改表格结构,使用非生成的字段:

gene1 int (11) NOT NULL

gene2 int (11) GENERATED ALWAYS AS (gene1 + YYY)

另外,建议您不要使用一个表中的生成字段作为外键或状态约束条件,除非确实需要,否则你可能会陷入这种错误。

你可能感兴趣的