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

将已验证可用的MySQL触发器转换为SQLite可执行语法的问题咨询

错误原因

你遇到的语法错误由SQLite和MySQL的触发器语法差异导致,核心问题有两个:

  1. SQLite不支持在CASE表达式内嵌入SET语句,所有数据修改操作必须作为独立的执行语句存在
  2. 你不需要通过额外SELECT查询获取NEW的字段值,NEW是触发器上下文自带的当前行待更新数据变量,可直接读取判断

修正后的SQLite触发器代码

CREATE TRIGGER grade_update_check
BEFORE UPDATE ON highschooler
FOR EACH ROW
BEGIN
    -- 年级大于12时回退为原值
    UPDATE highschooler SET grade = OLD.grade WHERE id = NEW.id AND NEW.grade > 12;
    -- 年级小于9时回退为原值
    UPDATE highschooler SET grade = OLD.grade WHERE id = NEW.id AND NEW.grade < 9;
    -- 同姓名同年级已存在记录时回退为原值
    UPDATE highschooler SET grade = OLD.grade WHERE id = NEW.id AND (SELECT COUNT(ID) FROM highschooler WHERE name = NEW.name AND grade = NEW.grade) = 1;
END;

注意事项

  • SQLite的标识符(表名、触发器名)不要用单引号包裹,单引号是字符串的边界,标识符如果需要转义用双引号或者反引号即可
  • 上述代码逻辑和你提供的MySQL触发器逻辑完全一致,已适配SQLite语法规则,执行后即可实现相同的校验效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:24:03