错误代码:3175。无法在基列具有外部约束的虚拟列上创建索引

时间:2016-09-27 16:01:34

标签: mysql calculated-columns mysql-5.7 virtual-column

在MySQL 5.7.11中,添加一个复合索引,其中一列是虚拟生成列会导致以下错误:

  

错误代码:3175。无法在基列具有外部约束的虚拟列上创建索引

实际上,生成虚拟列的基本列没有任何外部约束,因此错误消息是无法解释的。

MySQL 5.7.15中不会发生错误。

1 个答案:

答案 0 :(得分:0)

错误消息错误。实际问题是索引中的其他两列具有在其上定义的外键,这些外键设置为on update cascade。在MySQL 5.7.14之前不允许这样做:

  

在MySQL 5.7.13及更早版本中,InnoDB不允许在显式包含在虚拟索引中的非虚拟外键列上定义级联引用操作。在MySQL 5.7.14中解除了这个限制。 (enter image description here

将密钥更改为on update restrict会使错误消失。这也解释了为什么MySQL 5.7.15中不会出现此错误。