当前位置: 首页 > news >正文

如何实现SQL分级审批逻辑_利用触发器更新审批状态

触发器中禁止直接提交事务,因其破坏事务原子性;应将审批逻辑移至应用层或存储过程,触发器仅作轻量校验与状态合法性检查。触发器里不能直接提交事务(COMMIT)MySQL 和 PostgreSQL 的触发器中,COMMIT 或 ROLLBACK 会直接报错,比如 MySQL 报 ERROR 1422: Explicit or implicit commit is not allowed in stored function or trigger。这是因为触发器属于当前事务上下文,强行提交会破坏事务原子性。实操建议:把审批状态更新逻辑放到应用层或存储过程中,触发器只做轻量校验(如检查 status 是否合法、是否跳过中间级)如果必须用触发器驱动后续动作,改用 AFTER INSERT/UPDATE 触发器写入一个审批任务表,再由外部定时任务或监听程序处理PostgreSQL 可用 dblink 异步调用远程事务,但复杂度高、运维成本大,不推荐用于核心审批流BEFORE UPDATE 触发器修改 NEW.status 的边界情况分级审批常依赖字段值变化来判断是否进入下一级,比如从 'pending' → 'approved_by_mgr' → 'approved_by_hr'。在 BEFORE UPDATE 中直接赋值 NEW.status 看似可行,但容易漏掉并发冲突和前置条件未满足的问题。常见错误现象:用户手动 UPDATE 表,绕过业务逻辑,触发器强行覆盖 NEW.status 导致状态错乱同一审批单被多人同时操作,两个 BEFORE UPDATE 触发器都试图设为 'approved_by_hr',结果只有一条生效,另一条被覆盖没检查上一级是否已通过,就允许设置下一级状态(例如跳过部门经理直接到 HR)实操建议:在触发器内加显式校验:IF OLD.status = 'pending' AND NEW.status != 'approved_by_mgr' THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Must approve by manager first'; END IF;状态变更必须基于 OLD.status 和具体操作人角色字段(如 approver_role),不能只看新值避免在触发器里做跨表查询判断(如查 users.role),性能差且易锁表;优先把角色信息冗余到主表或用应用层传入PostgreSQL vs MySQL 触发器对 RETURNING 和 NEW 的处理差异MySQL 的触发器无法返回值,而 PostgreSQL 支持 RETURNING 子句配合触发器函数返回结果,但很多人误以为能在触发器里直接用 RETURNING 更新下游状态——其实不能。关键区别: WisPaper 复旦大学研发的AI学术搜索工具,5分钟内筛选1000篇论文

http://www.jsqmd.com/news/631068/

相关文章:

  • 2026年4月目前市政护栏供应商,道路护栏/市政护栏/绿化护栏/交通护栏/隔离护栏/桥梁护栏,市政护栏供应商选哪家 - 品牌推荐师
  • ArcGIS Pro 2.8 自动化质检:一个脚本搞定面要素的拓扑、空洞、多部件和几何错误
  • OPUS编解码器在audio DSP上的移植和应用诙
  • 【2026奇点大会核心预判】:大模型文本生成的5大技术拐点与企业落地生死线
  • 从开始配置漏洞环境到漏洞复现流程
  • 网钛CMS:经典PHP内容管理系统的源码解析与博客搭建指南
  • GoCodingInMyWay俜
  • 最强麒麟芯+自研风冷 华为Mate80 Pro MAX 风驰版全面评测:涡轮散热封神 性能稳到骨子里
  • 扩散模型对抗样本经典baselines特
  • 别再死记硬背公式了!用Excel和一张散点图,5分钟搞懂最小二乘法在干啥
  • 2026届毕业生推荐的五大AI论文方案推荐
  • GB/T28181设备接入WVP平台保姆级教程:从海康到大华的配置避坑指南
  • gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具挡
  • Nginx 学习总结泛
  • 《物联网识别技术》期末速成复习笔记
  • MyBatis中CONCAT函数的5个实战技巧:从模糊查询到动态SQL拼接
  • 统计学实战指南——指数在商业决策中的应用
  • 实时行情系统设计:从协议选择到高可用架构,再到数据源选型拓
  • 别再乱删DLL了!深入解析PyInstaller打包Pyside2的依赖树与正确瘦身姿势
  • 大模型RAG流水线混沌演练实录:向Embedding服务注入17ms延迟后,召回率断崖式下跌43%!
  • 深度解析DXVK:Linux游戏生态的Vulkan翻译层革命
  • Talebook个人书库系统完整指南:如何快速搭建专属在线图书馆
  • CSS如何利用Flex实现两层结构的嵌套布局_掌握父子容器的Flex属性继承
  • 【机器视觉】Halcon 授权密钥获取、更新与版本适配全攻略
  • 从ChatGPT到文心一言:5个国内大模型产品实测对比(附使用指南)
  • AI 时代:祛魅、适应与重新定义仍
  • Google 迎来「DeepSeek 时刻」:TurboQuant算法实现bit无损、×加速、×压缩、零预处理背
  • 雀魂AI助手Akagi:从麻将新手到高手的终极完整指南
  • ViGEmBus虚拟游戏控制器驱动:终极解决方案与完整使用教程
  • Qwen All-in-One完整教程:从原理到代码实现多任务AI引擎