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 之前引用了 branch
和 contact
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 运行命令顺序相同
您好,我有这三个非常简单的表,但我无法修复它以获得正确的外键格式。
创建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 之前引用了 branch
和 contact
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 运行命令顺序相同