You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

插入时自动设置当前日期触发递归错误的解决方法

解决SQLite触发器递归错误的方案

这个递归错误的根源在于你用了AFTER INSERT触发器来事后更新数据——当插入操作完成后,触发器里的UPDATE语句会修改同一张表的记录,而SQLite默认允许触发器递归调用,这就导致触发器被反复触发,最终超过了递归深度限制。

最优解决方案:用BEFORE INSERT触发器直接赋值

不需要事后更新,我们可以在插入数据之前就把dat字段设置为当前日期,这样完全避免了递归问题:

CREATE TRIGGER setTrigger BEFORE INSERT ON ex 
FOR EACH ROW 
BEGIN
  SET NEW.dat = date('now');
END;

更简单的方案:给字段设置默认值

其实连触发器都不需要,直接在表定义里给dat字段指定默认值,SQLite会自动在插入时填充当前日期:

CREATE TABLE ex(
  id INTEGER PRIMARY KEY,
  dat DATE NOT NULL DEFAULT(date('now')) CHECK(dat IS date(dat))
);

这样每次插入时,如果没有手动指定dat的值,数据库会自动用date('now')填充,既简洁又不会有递归问题。

为什么原来的触发器会出错?

你的AFTER INSERT触发器在插入完成后执行UPDATE操作,这个修改操作会触发SQLite的触发器递归机制——虽然是UPDATE而非INSERT,但SQLite默认允许触发器嵌套调用,循环往复最终触发了"too many levels of recursion"错误。而BEFORE INSERT触发器是在插入动作执行前修改待插入的行数据,不需要额外的更新操作,自然不会触发递归。

内容的提问来源于stack exchange,提问作者unnamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:25:55