【YashanDB資料庫】自關聯外來鍵插入資料時報錯:YAS-02033 foreign key constraint violated parent key not found

YashanDB發表於2024-08-05

問題現象

使用如下的sql語句建立自關聯外來鍵表:

drop table self_f_key;
create table self_f_key(t1 number primary key not null, t2 number);
create index i_s_1 on self_f_key(t2);
alter table self_f_key add constraint c_0001 foreign key(t2) references self_f_key(t1);

然後使用如下語句,嘗試插入兩行資料,這兩行資料彙總起來,是符合外來鍵關聯關係的:insert into self_f_key select 1,2 from dual union all select 2,1 from dual;

但是yashandb插入失敗:

問題的風險及影響

影響正常的業務處理流程,同樣的建表語句,同樣的insert,可以在oracle中正常執行:

問題影響的版本

所有的yashandb版本

問題發生原因

目前yashandb在處理此種情況下的完整性約束判斷時,沒有在事務級進行統一判斷,而是使用了類似於一行一行的判斷邏輯,

所以在事務級看來沒有違反完整性約束的資料無法插入

解決方法及規避方式

規避方法:禁用外來鍵約束

問題分析和處理過程

根據現網的問題場景,構造可以同時在yashandb/oracle執行的sql語句,比較並確認雙方的表現差異

yashandb對於此種情況下完整性約束的判斷核心在idxCheckKeyExist方法中

經驗總結

構造可以同時在yashandb/oracle執行的語句,方便分析確認問題

相關文章