以下陈述有什么问题?
ALTER TABLE submittedForecast
ADD CONSTRAINT FOREIGN KEY (data) REFERENCES blobs (id);
我收到的错误消息是
Can't create table `fcdemo`.`#sql-664_b` (errno: 150 "Foreign key constraint is incorrectly formed")
答案 0 :(得分:6)
这适用于MariaDB 10.1.8:
CREATE TABLE `submittedforecast` (
`id` INT(11) NOT NULL,
`data` INT(11) NOT NULL,
PRIMARY KEY (`id`),
INDEX `data` (`data`)
) ENGINE=InnoDB;
CREATE TABLE `blobs` (
`id` INT(11) NOT NULL,
`content` BLOB NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
ALTER TABLE submittedForecast
ADD CONSTRAINT FOREIGN KEY (data) REFERENCES blobs (id);
您能否提供您的MariaDB版本号和完整示例,包括CREATE TABLE
和submittedForecast
的{{1}}语句?
答案 1 :(得分:2)
不知道你是否已经解决了这个问题,但要确保表之间的引擎和排序规则匹配(例如:latin1到latin1和InnoDB到InnoDB)。
我遇到了同样的问题,通过切换这些问题,我设法让它发挥作用。
答案 2 :(得分:0)
我遇到了同样的问题,查看了我的表结构后,发现我的子表的外键子句未引用父表的主键。一旦将其更改为引用父表的主键,该错误就消失了。
答案 3 :(得分:0)
我遇到了同样的错误,实际上很容易解决,您已为约束命名,类似的事情应该这样做:
ALTER TABLE submittedForecast ADD CONSTRAINT `fk_submittedForecast`
FOREIGN KEY (data) REFERENCES blobs (id)
如果您希望获得更大的内聚力,请在查询末尾添加
ON DELETE CASCADE ON UPDATE RESTRICT
这也可能是一个不同的字段错误,因此请检查表键和外键是否具有相同的类型并具有相同的属性。