当我尝试在SQLite中创建此触发器时,出现以下错误
create trigger timeslot_check1 after insert on section
for each row
when(new.time_slot_id not in(select time_slot_id
from time_slot))
begin
rollback
end;
错误:接近“回滚”:语法错误:
答案 0 :(得分:2)
如documentation所示,触发器主体中允许的唯一SQL命令是UPDATE,INSERT,DELETE和SELECT。
要引发错误,您必须使用查询中的RAISE() function:
CREATE TRIGGER timeslot_check1
BEFORE INSERT ON section
FOR EACH ROW
WHEN NEW.time_slot_id NOT IN (SELECT time_slot_id FROM time_slot)
BEGIN
SELECT RAISE(FAIL, "invalid timeslot");
END;
无论如何,使用foreign key可以更轻松地完成此项检查。