问题描述
由于您在创建表ItemOrdered时指定的外键约束,因此在执行此插入时:
INSERT INTO ItemOrdered VALUES(401565981,234489212,'2')
…值401565981和234489212必须分别对应于Ords和BelitId表中的键值-即这两个查询应返回行:
select *
from Ords
where OrderId = 401565981;
select *
from BeltId
where BeltId = 234489212;
错误消息表明情况并非如此。
解决方法
嗨,我正在Oracle SQL开发人员中开发数据库,试图从另一个表访问foriegn键。我目前正在使用以下CREATE语句创建的ItemOrdered表
CREATE TABLE ItemOrdered(OrderID varchar2(9) REFERENCES Ords(OrderID),BeltID varchar2(9) REFERENCES BeltID(BeltID),Quantity varchar(4) NOT NULL,PRIMARY KEY(OrderID,BeltID))
如您所见,我具有以下前键Ords和BeltID。
现在,当我尝试运行以下语句时
INSERT INTO ItemOrdered VALUES(401565981,234489212,'2')
它给了我以下错误
违反-找不到父密钥02291。00000-“违反完整性约束(%s。%s)-找不到父密钥”
如果需要,我已经提供了Ords CREATE语句
CREATE TABLE Ords(OrderID varchar2(9) PRIMARY KEY,CustomerID varchar(9) REFERENCES Customers(CustomerID),Expected_Delivery_Date date DEFAULT sysdate NOT NULL,Actual_Delivery_Date date DEFAULT sysdate NOT NULL,Payment_Due_Date date DEFAULT sysdate NOT NULL,Order_Date date DEFAULT sysdate NOT NULL,Price Varchar(10),Order_Placed varchar2(1) CONSTRAINT OrderPlaced
CHECK(Order_Placed IN('Y','N')) NOT NULL,Order_Confirmed varchar2(1)
CONSTRAINT Order_Confirmed CHECK(Order_Confirmed IN('Y',Order_Completed varchar2(1) CONSTRAINT Order_Completed
CHECK(Order_Completed IN('Y','N')) NOT NULL)
我还提供了我的BeltID CREATE语句
CREATE TABLE BeltID(BeltID varchar2(9) PRIMARY KEY,BeltLengthID varchar2(9) REFERENCES BeltLength(BeltLengthID),ColourID varchar2(9) REFERENCES Colour(ColourID),DesignID varchar2(9) REFERENCES Design(DesignID),ComponentID varchar2(9) REFERENCES Component(ComponentID))
我似乎不太明白为什么会出现此错误。为什么有明确的解释?
这是我正在尝试做的http链接。 连结文字