我正在尝试创建一个触发器,用于更新等级更新的学生的所有朋友的成绩。
create trigger upgrade
after update on Highschooler
when new.grade=old.grade+1 and trigger_nestlevel() < 2
begin
update Highschooler
set grade=new.grade
where ID in (
select ID2
from Friend
where ID1=old.ID
)
;
end
朋友的朋友(朋友......)等级增加的人也正在“升级”我怎么能阻止这个?
答案 0 :(得分:3)
正如您在Limits In SQLite中所读到的那样,您可以使用 PRAGMA recursive_triggers 语句清除递归触发功能。
<强> 10。最大触发递归深度
SQLite限制触发器的递归深度以防止a 涉及使用无限金额的递归触发器的语句 记忆。
在SQLite版本3.6.18之前,触发器不是递归的,所以 这个限制毫无意义。从版本3.6.18开始,递归 支持触发器,但必须使用 PRAGMA recursive_triggers声明。从版本3.7.0开始, 默认情况下启用递归触发器,但可以手动禁用 使用PRAGMA recursive_triggers。 SQLITE_MAX_TRIGGER_DEPTH只是 如果启用递归触发器,则有意义。
默认的最大触发递归深度为1000。