使用用于外键约束的列创建mysql生成的列会导致错误

mefy6pfw  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(298)

我尝试将生成的存储列添加到运行以下sql命令的现有表中:

ALTER TABLE routes ADD routes_hash char(32)
      AS (MD5(CONCAT(`traveler_id`, `track`))) stored;

mysql返回错误消息:

ERROR 1025 (HY000): Error on rename of './travelers/#sql-558_69' to './travelers/routes'
         (errno: 150 - Foreign key constraint is incorrectly formed)

mysql版本是5.7.20。以下是数据库结构:

CREATE TABLE `travelers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
   PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
CREATE TABLE `routes` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `traveler_id` int(11) NOT NULL,
  `track` multilinestring NOT NULL,
  PRIMARY KEY (`id`),
  KEY `traveler_id` (`traveler_id`),
  CONSTRAINT `routes_ibfk_1` FOREIGN KEY (`traveler_id`)
        REFERENCES `travelers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我在mysql文档中没有发现任何限制,禁止将参与外键约束的列用作用于生成列的表达式的一部分。但是,如果我排除 traveler_id 从生成的列表达式 routes_hash 列创建得很好。这是mysql的一个bug还是我缺少了一些关于生成列用法的信息?

mbjcgjjk

mbjcgjjk1#

不幸的是,mysql的一个bug甚至影响了当前的5.7和8.0版本。我在mysql的bug追踪器上找到了描述https://bugs.mysql.com/bug.php?id=88111 . 请注意。

相关问题