mariaDB外键中的奇数错误

时间:2015-04-01 07:25:32

标签: mysql foreign-keys mariadb

嗨,我希望有人可以帮我解决问题,当我尝试添加外键约束时,我会收到此错误。

我的数据库名称是“hazard”

子:

CREATE TABLE `child` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `a` INT(11) NULL DEFAULT NULL,
    `b` INT(11) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'

父:

CREATE TABLE `parent` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `alfa` INT(11) NULL DEFAULT NULL,
    `beta` INT(11) NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)
COLLATE='utf8_general_ci'

这些是创建代码(使用HeidiSQL)

当我尝试添加外键时 与

ALTER TABLE CHILD MODIFY COLUMN A INT,add constraint fk_parent_child FOREIGN KEY(A) REFERENCES PARENT(ALFA);

ALTER TABLE CHILD add constraint fk1 foreign key (a) references parent(alfa);

我得到了同样的错误

  

无法创建表'危险。#sql-d04_53'(错误号:150)

许多使用MariaDB和mySQL的同学都会发生这种情况

事先为此带来不便的道歉,我希望你们能帮助我们。

2 个答案:

答案 0 :(得分:0)

添加

KEY (`alfa`)

到父表。 "引用的列必须是PRIMARY KEY或UNIQUE索引。" - https://mariadb.com/kb/en/mariadb/foreign-keys/

http://sqlfiddle.com/#!9/b4c12

答案 1 :(得分:-1)

错误150通常意味着您以错误的顺序更新表。也就是说,您的第一个 INSERT违反了FOREIGN KEY INSERT将修复的second约束。

在您的情况下,您正在执行ALTER而不是INSERT。交换ALTER s的顺序。如果这不起作用,请检查数据以确定您不会违反FK约束。如果你过去了,请继续阅读......

在极端情况下,您可以在执行插入时关闭外键约束,然后重新打开它们。 (但这让你很容易搞砸了。)