在 MySQL 5.7.11 中,添加其中一个列是虚拟生成列的复合索引会导致以下错误:
错误代码:3175。无法在其基列具有外部约束的虚拟列上创建索引
实际上,生成虚拟列的基列没有任何外部约束,因此错误消息是莫名其妙的。
MySQL 5.7.15 中不会出现该错误。
在 MySQL 5.7.11 中,添加其中一个列是虚拟生成列的复合索引会导致以下错误:
错误代码:3175。无法在其基列具有外部约束的虚拟列上创建索引
实际上,生成虚拟列的基列没有任何外部约束,因此错误消息是莫名其妙的。
MySQL 5.7.15 中不会出现该错误。
错误信息是错误的。实际问题是索引中的其他两列定义了外键,设置为on update cascade
. 在 MySQL 5.7.14 之前这是不允许的:
在 MySQL 5.7.13 及更早版本中,InnoDB 不允许在虚拟索引中显式包含的非虚拟外键列上定义级联引用操作。MySQL 5.7.14 中取消了此限制。(来源)
更改键以on update restrict
使错误消失。这也解释了为什么在 MySQL 5.7.15 中不会出现这个错误。