SQL Fiddle创建表时提示‘cannot add foreign key constraint’错误排查
排查SQL外键约束报错(cannot add foreign key constraint)的问题
你遇到的报错主要来自两个核心问题,下面逐一说明并给出修正方案:
1. 被引用表的创建顺序错误
外键约束要求被引用的表必须先于引用它的表创建,否则数据库找不到对应的主键来关联:
Employe表的外键shop_id引用Coffee_Shop(shop_id),但你先创建了Employe,此时Coffee_Shop还未定义,数据库无法识别这个外键关联Coffee表的外键supplier_id引用Supplier(supplier_id),同样Supplier是在Coffee之后创建的,导致外键无法解析
2. 建表语句存在多余逗号
多个表的最后一列定义后多了不必要的逗号,这会触发语法错误,间接导致外键约束创建失败:
Coffee_Shop表中state CHAR(2),末尾的逗号Supplier表中email VARCHAR(50) NOT NULL,末尾的逗号
修正后的完整代码
-- 先创建被引用的基础表:Coffee_Shop、Supplier CREATE TABLE Coffee_Shop ( shop_id INT PRIMARY KEY, shop_name VARCHAR(50), state CHAR(2) ); CREATE TABLE Supplier ( supplier_id INT PRIMARY KEY, company_name VARCHAR(50), country VARCHAR(30), sales_contact_name VARCHAR(60), email VARCHAR(50) NOT NULL ); -- 再创建引用上述表的Employe、Coffee CREATE TABLE Employe ( employee_id INT PRIMARY KEY, first_name VARCHAR(30), last_name VARCHAR(30), hire_date DATE, job_title VARCHAR(30), shop_id INT, FOREIGN KEY (shop_id) REFERENCES Coffee_Shop(shop_id) ); CREATE TABLE Coffee ( coffee_id INT PRIMARY KEY, shop_id INT, supplier_id INT, coffee_name VARCHAR(30), price_per_pound NUMERIC(5,2), FOREIGN KEY (shop_id) REFERENCES Coffee_Shop(shop_id), FOREIGN KEY (supplier_id) REFERENCES Supplier(supplier_id) );
内容的提问来源于stack exchange,提问作者VerizonCorporateOverlords
相关产品推荐
相关产品推荐

