W;违反完整性约束意味着什么-在SQLplus中找不到父项

W;违反完整性约束意味着什么-在SQLplus中找不到父项,sql,sqlplus,Sql,Sqlplus,这是我的代码 有人能看一下吗。谢谢 //table CREATE TABLE LINE ( REQ_NUM NUMBER (38,0) NOT NULL, LIN_NUM NUMBER (38,0), LIN_HOURS NUMBER (4,2) NOT NULL, LINE_PRICE NUMBER (6,2) NOT NULL, SVC_NUM NUMBER(38,0) NOT NULL, PRIMARY KEY(REQ_NUM,LIN_NUM), FOREIGN KEY (SVC_NUM)

这是我的代码 有人能看一下吗。谢谢

//table
CREATE TABLE LINE (
REQ_NUM NUMBER (38,0) NOT NULL,
LIN_NUM NUMBER (38,0),
LIN_HOURS NUMBER (4,2) NOT NULL,
LINE_PRICE NUMBER (6,2) NOT NULL,
SVC_NUM NUMBER(38,0) NOT NULL,
PRIMARY KEY(REQ_NUM,LIN_NUM),
FOREIGN KEY (SVC_NUM) REFERENCES SERVICE
);
可以插入底部三个数据,但不能插入其中的数据 //资料

问题陈述 完整性约束冲突是指当命令尝试对引用父
表中不存在的记录的子
表执行
插入
更新
时,或者当命令尝试对父
表执行
删除
更新
时,删除/更改子
表引用的
主键

例子 在这些示例中,我将有一个名为
PET
的虚拟表和另一个名为
OWNER
OWNER
PET
引用,
OWNER\u ID
OWNER
表中的
主键
,以及
PET
表中的
外键

例1 假设有一个
OWNER
,其
OWNER\u ID
为1。让我们进一步假设没有
PET
OWNER\u ID
为1。在这种情况下,您可以安全地
更新
所有者
所有者ID
甚至
删除
所有者ID
为1的记录,前提是没有关于
所有者
的进一步引用

例2 假设有一个
OWNER
,其
OWNER\u ID
为2。让我们进一步假设至少有一个
PET
记录,其
OWNER\u ID
也是2,引用这个特定的
OWNER
记录。您无法删除其
所有者ID
为2的
所有者
,因为这将导致完整性约束冲突,因为它正被
PET
引用。因此,您可以先删除引用的
PET
,或者在执行
delete
后将其
OWNER\u ID
更改为引用实际
所有者的内容。同样,出于同样的原因,您不能
更新
所有者ID
为2的
所有者ID

例3 假设有一个
所有者
所有者ID
为3,还有一个
宠物
所有者ID
也为3。如果我们将
PET.OWNER\u ID
更新为4,那么当且仅当存在
OWNER
OWNER\u ID
为4时,它才会成功。否则它将违反完整性约束并失败

例4 假设我们尝试插入一个
PET
,其
OWNER\u ID
为5。当且仅当
OWNER\u ID
为5的
OWNER
存在时,它才会成功。否则,由于完整性约束冲突,它将失败

总结 由于您试图对子
执行
insert
,因此您的问题与示例4相同,即,您试图
将记录插入子
,引用父
,而父
中不存在的值作为
主键

因此,您需要删除试图创建孤立记录的插入,或者执行
插入
-
选择
,如

INSERT INTO LINE(REQ_NUM, LIN_NUM, LIN_HOURS, LINE_PRICE, SVC_NUM)
SELECT 1300, 1, 35, 0.75, SERVICE.SVC_NUM
FROM SERVICE
WHERE SERVICE.SVC_NUM = 50;
或者先将缺少的记录插入
服务
,或者从脚本中删除孤立插入

INSERT INTO LINE(REQ_NUM, LIN_NUM, LIN_HOURS, LINE_PRICE, SVC_NUM)
SELECT 1300, 1, 35, 0.75, SERVICE.SVC_NUM
FROM SERVICE
WHERE SERVICE.SVC_NUM = 50;