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

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

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

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

mysql返回错误消息:

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

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

  1. CREATE TABLE `travelers` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(128) NOT NULL,
  4. PRIMARY KEY (`id`)
  5. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  6. CREATE TABLE `routes` (
  7. `id` int(11) NOT NULL AUTO_INCREMENT,
  8. `traveler_id` int(11) NOT NULL,
  9. `track` multilinestring NOT NULL,
  10. PRIMARY KEY (`id`),
  11. KEY `traveler_id` (`traveler_id`),
  12. CONSTRAINT `routes_ibfk_1` FOREIGN KEY (`traveler_id`)
  13. REFERENCES `travelers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
  14. ) 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 . 请注意。

相关问题