我尝试将生成的存储列添加到运行以下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还是我缺少了一些关于生成列用法的信息?
1条答案
按热度按时间mbjcgjjk1#
不幸的是,mysql的一个bug甚至影响了当前的5.7和8.0版本。我在mysql的bug追踪器上找到了描述https://bugs.mysql.com/bug.php?id=88111 . 请注意。