嗨,我希望有人可以帮我解决问题,当我尝试添加外键约束时,我会收到此错误。
我的数据库名称是“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);
我得到了同样的错误
许多使用MariaDB和mySQL的同学都会发生这种情况无法创建表'危险。#sql-d04_53'(错误号:150)
事先为此带来不便的道歉,我希望你们能帮助我们。
答案 0 :(得分:0)
添加
KEY (`alfa`)
到父表。 "引用的列必须是PRIMARY KEY或UNIQUE索引。" - https://mariadb.com/kb/en/mariadb/foreign-keys/
答案 1 :(得分:-1)
错误150通常意味着您以错误的顺序更新表。也就是说,您的第一个 INSERT违反了FOREIGN KEY
INSERT将修复的second
约束。
在您的情况下,您正在执行ALTER
而不是INSERT
。交换ALTER
s的顺序。如果这不起作用,请检查数据以确定您不会违反FK约束。如果你过去了,请继续阅读......
在极端情况下,您可以在执行插入时关闭外键约束,然后重新打开它们。 (但这让你很容易搞砸了。)