SQLite Trigger执行时更新全表而非仅指定选中行的问题
触发器仅更新目标行修复方案
问题根因
- 你现有触发器中的
UPDATE语句未加行过滤条件,触发时会修改TableA所有行的Col2值 - 注意你需求中描述的判断字段为
Col1,现有代码中判断的是date_back,后续调整时需和实际字段名保持一致
推荐修复方案(使用BEFORE UPDATE触发器,更简洁高效)
无需额外写UPDATE语句,直接修改当前触发行的新值即可:
CREATE TRIGGER trigger1 BEFORE UPDATE ON TableA WHEN NEW.Col1 IS NOT NULL AND OLD.Col1 IS NULL BEGIN SET NEW.Col2 = 11; END;
若需保留AFTER UPDATE触发器的写法
必须添加主键匹配条件,仅修改当前触发的行,假设TableA的主键字段为id:
CREATE TRIGGER trigger1 AFTER UPDATE ON TableA WHEN NEW.Col1 IS NOT NULL AND OLD.Col1 IS NULL BEGIN UPDATE TableA SET Col2 = 11 WHERE id = OLD.id; END;
注意事项
- 如果实际判断的字段是
date_back,将上述代码中的Col1替换为date_back即可 - 若表的主键字段不是
id,替换为实际的主键字段名即可
内容的提问来源于stack exchange,提问作者user4891693
相关产品推荐
相关产品推荐

