如果我在sqlite 3.8.8.3中执行以下脚本
PRAGMA foreign_keys=on;
create table A (
k integer primary key not null
);
create table B (
value text primary key,
k integer references A(k) on delete cascade
);
create table C (
k integer primary key,
value text
);
create trigger C_A before insert on C
begin
insert or ignore into A values(NEW.k);
end;
insert into A values (5);
select * from A;
insert into B values ('asdf', 5);
select * from B;
insert or ignore into A values(5); --just calling this works right
select * from B;
insert or ignore into C values (5, 'qwer'); --this works too
select * from B;
insert or replace into C values (5, 'qwer'); --this doesn't work
select * from B; --doesn't print anything
我得到了输出
5
asdf|5
asdf|5
asdf|5
当我期待输出
时5
asdf|5
asdf|5
asdf|5
asdf|5
好像是" or replace
"传播到触发器中,替换A
中的行,并删除B
中的行。
这是预期的行为吗?我误解了应该做些什么吗?
答案 0 :(得分:2)
这是documented:
ON CONFLICT子句可以指定为触发器正文中UPDATE或INSERT操作的一部分。但是,如果将ON CONFLICT子句指定为导致触发器触发的语句的一部分,则使用外部语句的冲突处理策略。