SQL 外键错误(错误号:150 "Foreign key constraint is incorrectly formed")

SQL FOREIGN KEY ERROR (errno: 150 "Foreign key constraint is incorrectly formed")

您好,我有这三个非常简单的表,但我无法修复它以获得正确的外键格式。

创建TABLE公司( company_name varchar(30) UNIQUE NOT NULL, bid INT(15) NOT NULL UNIQUE, cid INT(15) NOT NULL UNIQUE, 外键(出价)参考分支(branch_id), 外键 (cid) 参考联系人 (contact_id) );

创建 TABLE 分支( branch_id INT(15) 不为空 AUTO_INCREMENT 唯一, branch_type varchar(30), cid INT(15) NOT NULL UNIQUE, 主键(branch_id), 外键 (cid) 参考联系人 (contact_id) );

创建 TABLE 联系人( contact_id INT(15) 不为空 AUTO_INCREMENT 唯一, fst_name varchar(20), mdl_name varchar(20), lst_name varchar(20), 性别 varchar(20), 出生日期, phone_number 情报 (15), 地址 varchar(255), 电子邮件 varchar(255), bid INT(15) NOT NULL UNIQUE, 主键(contact_id), FOREIGN KEY (bid) REFERENCES 分支 (branch_id) )ENGINE=InnoDB;

他们三个都有相同的error150。 非常感谢您的帮助。table

问题是您在创建 company table 之前引用了 branchcontact table。 此外,分支 table 引用联系人 table,反之亦然,因此数据库是这样的:

正在创建 contact table ...有一个 bid 字段连接到名为 branch 的 table ... table 分支不存在 -> 错误

您必须先创建 contact table,但 没有引用出价的外国 ID ,然后创建 branch table 然后 company table。 设置好 table 后,您可以执行另一个查询以添加对出价的外国 ID 引用。

所以像这样:

CREATE TABLE contact( contact_id INT(15) NOT NULL AUTO_INCREMENT UNIQUE, fst_name varchar(20), mdl_name varchar(20), lst_name varchar(20), sex varchar(20), dob DATE, phone_number INT(15), address varchar(255), email varchar(255), bid INT(15) NOT NULL UNIQUE, PRIMARY KEY (contact_id) )ENGINE=InnoDB;


CREATE TABLE branch( branch_id INT(15) NOT NULL AUTO_INCREMENT UNIQUE, branch_type varchar(30), cid INT(15) NOT NULL UNIQUE, PRIMARY KEY (branch_id), FOREIGN KEY (cid) REFERENCES contact(contact_id) );


CREATE TABLE company( company_name varchar(30) UNIQUE NOT NULL, bid INT(15) NOT NULL UNIQUE, cid INT(15) NOT NULL UNIQUE, FOREIGN KEY (bid) REFERENCES branch(branch_id), FOREIGN KEY (cid) REFERENCES contact(contact_id) );

通知我删除了FOREIGN KEY (bid) REFERENCES branch (branch_id) 然后:

ALTER TABLE contact ADD FOREIGN KEY (bid) REFERENCES branch(branch_id);

P.S 运行命令顺序相同