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

如何利用SQL触发器自动记录数据修改_编写审计日志逻辑

MySQL触发器中禁止对正在修改的表执行SELECT或INSERT操作,必须显式引用OLD/NEW字段;PostgreSQL的AFTER触发器必须返回NEW或OLD;审计时间应统一用CURRENT_TIMESTAMP并配合适当时区类型。MySQL 触发器里不能用 INSERT ... SELECT 直接读当前表想在 UPDATE 触发器里把旧值写进审计表,顺手写个 INSERT INTO audit_log SELECT OLD.id, OLD.name FROM t_user?会报错 ERROR 1442 (HY000): Can't update table 't_user' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.。MySQL 禁止触发器里再查或改自己正在被修改的表。实操建议:所有需要记录的字段,必须显式写出 OLD.col1、OLD.col2,不能用 SELECT * FROM ...如果字段多且常变,建议在应用层拼 SQL 或用视图预处理,别硬塞进触发器注意 OLD 在 INSERT 触发器里不可用,NEW 在 DELETE 触发器里不可用——写错类型直接报语法错误PostgreSQL 的 AFTER 触发器必须返回 NEW 或 OLDPostgreSQL 不像 MySQL 那样允许 AFTER 触发器只做日志不返回值。如果你写了个 AFTER UPDATE 触发器函数但末尾没写 RETURN NEW;,执行更新时会报 ERROR: trigger procedure did not return a value,而且整个事务会回滚。实操建议:BEFORE 触发器可修改 NEW 并返回它(比如自动更新 updated_at);AFTER 触发器只需返回原值即可,别漏掉函数体末尾统一加 RETURN NEW;(UPDATE/INSERT)或 RETURN OLD;(DELETE),哪怕你只记日志别在触发器里调 RAISE EXCEPTION 做业务校验——审计日志该记还得记,异常该抛还得抛,两者逻辑要分开审计字段时间戳要用 CURRENT_TIMESTAMP 而非 NOW()(尤其跨时区部署)很多触发器里写 INSERT INTO audit_log (...) VALUES (..., NOW(), ...),上线后发现日志时间比实际操作晚 8 小时。问题出在 NOW() 返回的是会话时区时间,而数据库服务器、应用服务器、客户端可能各有时区设置;CURRENT_TIMESTAMP 才是 SQL 标准定义的“语句开始时刻的 UTC 时间”,配合 TIMESTAMP WITH TIME ZONE 类型才能真正对齐。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

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

相关文章:

  • Kubernetes监控基石:kube-state-metrics核心原理与生产实践指南
  • Python queue模块的用法
  • 【MCP 2026量子计算适配实战白皮书】:全球首批3大产业落地案例、7类硬件兼容瓶颈与5步迁移 checklist
  • SuperDesign:IDE内AI设计助手,自然语言生成UI与代码
  • 如何快速掌握OpenFace面部行为分析:新手到专家的完整实战指南
  • 抖音视频批量下载器:5分钟解决内容创作者的素材收集难题
  • 2026年OpenClaw/Hermes Agent怎么部署?零技术教程
  • Lombok 注解教程
  • 自然语言驱动GUI测试:AUITestAgent架构解析与工程实践
  • 批量卸载工具Bulk Crap Uninstaller:3分钟彻底清理Windows垃圾软件
  • 移动端UI自动化测试新框架Maestro:声明式语法与实战指南
  • 深度学习噪声训练:提升模型泛化能力的实战指南
  • 3分钟搞定QMC加密音频:你的专属音乐解锁秘籍
  • Python机器学习代码健壮性提升的10个核心技巧
  • 终极Windows安装指南:MediaCreationTool.bat一键突破所有版本限制
  • 【MCP 2026日志异常检测终极指南】:覆盖97.3%未知攻击模式的实时检测框架首次公开
  • neutron详解
  • B站视频下载终极指南:轻松获取4K大会员视频的完整教程
  • UFLDv2车道线检测与车道偏离预警(LDWS)实战
  • 终极教程:3步在Windows上完美使用Switch Joy-Con手柄
  • 泵人心中很清楚的HPH构造——三大系统和常见故障全面解析
  • BetterGI原神自动化工具:终极解放双手的完整指南
  • CVAT 3D标注实战:手把手教你用点云数据标注自动驾驶场景(附避坑指南)
  • 【Flutter for OpenHarmony 第三方库】Flutter for OpenHarmony 引导页设计与新用户体验优化实现指南
  • SocialEcho vs Buffer vs Hootsuite:2026 年三大出海社媒工具深度横评 - SocialEcho社媒管理
  • JavaScript中对象toString与valueOf的重写与调用
  • 终极海口作战计划
  • 【MCP 2026边缘部署黄金法则】:20年架构师亲授7步极简优化流程,错过再等三年
  • ARM版的windows(macbook虚拟机使用)在国内外技术平台有哪些版本可以选择?
  • STM32F103C8T6最小系统板:物联网图像采集终端硬件基础