MariaDB:ALTER TABLE语法添加FOREIGN KEY?

时间:2016-03-08 10:17:41

标签: mariadb

以下陈述有什么问题?

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")

4 个答案:

答案 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 TABLEsubmittedForecast的{​​{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

这也可能是一个不同的字段错误,因此请检查表键和外键是否具有相同的类型并具有相同的属性。