我正在尝试将数据插入到我的数据库中,并且我继续在1插入命令上获得“错误1452(23000):无法添加或更新子行:外键约束失败” . 我相信它与我创建表时使用的FK有关 . 但我不知道如何解决它 . 任何建议都会很棒 .
原始的创建表命令:REATE TABLE Donut(DonutID int,DonutName VARCHAR(25)not null,Description VARCHAR(25)not null,UnitPrice decimal(4,2)not null,PRIMARY KEY(DonutID));
CREATE TABLE Customer(CustomerID INT not null,FirstName VARCHAR(20)not null,LastName VARCHAR(20)not null,StreetAddress VARCHAR(20)not null,Apt VARCHAR(20),City VARCHAR(20)not null,State VARCHAR( 2)not null,ZipCode VARCHAR(5)not null,HomePhone VARCHAR(10)not null,MobilePhone VARCHAR(10)not null,OtherPhone VARCHAR(10),PRIMARY KEY(CustomerID));
CREATE TABLE Orders(OrderID int not null,CustomerID int,OrderDate Date not null,Notes VARCHAR(100),PRIMARY KEY(OrderID),FOREIGN KEY(CustomerID)REFERENCES Customer(CustomerID));
CREATE TABLE OrderItem(OrderID INT,DonutID INT,Qty SMALLINT not null,PRIMARY KEY(OrderID,DonutID),FOREIGN KEY(OrderID)REFERENCES Orders(CustomerID),FOREIGN KEY(DonutID)REFERENCES Donut(DonutID));
插入失败的命令:INSERT INTO OrderItem(OrderID,DonutID,Qty)VALUES(991,1,12),(992,2,500),(993,3,6);
2 回答
可能会发生此错误,因为您插入的记录中的一个或两个引用了
Orders
和/或Donut
表中不存在的记录 .尝试运行以下查询:
还有这个:
如果您没有看到上述两个查询中的四条父记录,那么您就可以得到问题的答案 . 解决方案当然是不参考不存在的记录 .
我不得不更改OrderID的外键引用..它引用了订单(customerID),它应该是引用订单(OrderID)
CREATE TABLE OrderItem(OrderID INT,DonutID INT,Qty SMALLINT not null,PRIMARY KEY(OrderID,DonutID),FOREIGN KEY(OrderID)REFERENCES Orders(OrderID),FOREIGN KEY(DonutID)REFERENCES Donut(DonutID));
回答了我自己的问题!