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;