如何编写带IF条件的MySQL AFTER UPDATE触发器实现跨表数据更新
借书记录表更新触发器修正方案
原代码存在的问题
- 无需额外查询
NEW记录的字段值:行级触发器中NEW关键字可直接获取更新后当前行的所有字段值,冗余查询会降低执行效率 - 变量声明语法错误:MySQL中变量声明使用
DECLARE而非DEFAULT,本需求场景无需额外声明变量存储状态字段值 - 条件判断符号错误:SQL标准语法中值判断使用单等号
=而非双等号== - 分支语句结构不完整:缺少
IF语句的THEN关键字和END IF收尾标识 - 缺少触发器基础配置:未声明触发时机、关联数据表、行级触发规则
修正后的完整触发器代码
-- 临时修改语句分隔符,避免触发器内的分号提前终止创建语句 DELIMITER // CREATE TRIGGER update_book_available_after_return AFTER UPDATE ON borrowed_book FOR EACH ROW BEGIN -- 仅当更新后状态为已归还时执行可借阅数量更新 IF NEW.status = 'returned' THEN UPDATE books SET availableCopies = availableCopies + NEW.copies WHERE book_ID = NEW.book_ID; END IF; END // -- 恢复默认语句分隔符 DELIMITER ;
注:以上代码适配MySQL环境,其他数据库可根据对应语法规则调整触发器声明、行变量引用方式即可
内容的提问来源于stack exchange,提问作者Esther Iyege
相关产品推荐
相关产品推荐

