不能在带有外键的Oracle数据库表中插入行



我想用这种结构插入行:

CREATE TABLE table_name1 (
id_name1 NUMBER,
id_name2 NUMBER,
id_name3 NUMBER,
datevalue TIMESTAMP,
value_name1 NUMBER,
PRIMARY KEY (id_name1),
FOREIGN KEY (id_name2) REFERENCES table_name2 (id_name2),
FOREIGN KEY (id_name3) REFERENCES table_name3 (id_name3)

table_name2为空Table_name3有一些数据

Insert查询:


INSERT INTO table_name1 (
id_name1, 
id_name2, 
id_name3, 
datevalue,  
value_name1
)
VALUES (
1, 
1,  
1, 
TO_TIMESTAMP('2020-07-03 13:29:00', 'YYYY-MM-DD HH24:MI:SS'), 
1
)

当执行查询时,我有这个错误:

SQL Error [2291] [23000]: ORA-02291: integrity constraint violation (SYSTEM.SYS_C008315) - source key not found

错误位置:line: 1

我认为在插入值表与外键的问题。谁能说问题出在哪里?

大多数人都在评论中给出了答案,但我还是想把它写下来。

为了有一个外键,你所引用的表必须存在(这使得你的例子有些不完整,因为其他两个表没有创建),此外,你想要引用的任何键必须存在你可以插入东西到你的table_name1

要把它写下来作为一个完整的例子,您也可以插入sqlfiddle:

CREATE TABLE table_name2 (
id_name2    NUMBER,
value_name2 NUMBER,
PRIMARY KEY(id_name2)
);
CREATE TABLE table_name3 (
id_name3    NUMBER,
value_name3 NUMBER,
PRIMARY KEY(id_name3)
);
CREATE TABLE table_name1 (
id_name1 NUMBER,
id_name2 NUMBER,
id_name3 NUMBER,
datevalue TIMESTAMP,
value_name1 NUMBER,
PRIMARY KEY (id_name1),
FOREIGN KEY (id_name2) REFERENCES table_name2 (id_name2),
FOREIGN KEY (id_name3) REFERENCES table_name3 (id_name3)    
);

请注意,顺序很重要,因为table_name2table_name3必须在table_name1之前创建,否则REFERENCES显然没有什么可参考的。

插入/选择

INSERT INTO table_name2 (
id_name2, 
value_name2
)
VALUES (
2, -- id_name2
42
);

INSERT INTO table_name3 (
id_name3, 
value_name3
)
VALUES (
3, -- id_name2
999
);
INSERT INTO table_name1 (
id_name1, 
id_name2, 
id_name3, 
datevalue,  
value_name1
)
VALUES (
1, -- id_name1
2, -- id_name2
3, -- id_name3
TO_TIMESTAMP('2020-07-03 13:29:00', 'YYYY-MM-DD HH24:MI:SS'), 
1
);
select * from table_name1;
select * from table_name2;
select * from table_name3;

这里的顺序也很重要,因为在插入(从而引用)table_name1

之前,您必须首先拥有table_name2table_name3中的键。

最新更新