首页 文章

获取错误1452:无法添加或更新子行:使用1个4插入语句时,外键约束失败

提问于
浏览
0

我正在尝试将数据插入到我的数据库中,并且我继续在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 回答

  • 0

    可能会发生此错误,因为您插入的记录中的一个或两个引用了 Orders 和/或 Donut 表中不存在的记录 .

    尝试运行以下查询:

    SELECT *
    FROM Orders
    WHERE CustomerID IN (991, 992);
    

    还有这个:

    SELECT *
    FROM Donut
    WHERE DonutID IN (1, 2);
    

    如果您没有看到上述两个查询中的四条父记录,那么您就可以得到问题的答案 . 解决方案当然是不参考不存在的记录 .

  • 0

    我不得不更改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));

    回答了我自己的问题!

相关问题