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