如何利用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助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

相关推荐
笃行3507 小时前
数据库性能优化的五处内核改造,KingbaseES 配了四件诊断工具
数据库
非优秀程序员9 小时前
第02章 杭电的英语老师与一台服务器|《互联网产品恩仇录》
数据库·node.js·代码规范
用户9562562542913 小时前
跟做:Firecrawl 单页转 Markdown 再丢进沙箱总结
python·api
SelectDB13 小时前
SelectDB 是哪个公司的?是国产数据库吗?一篇讲清飞轮科技与 Apache Doris 的关系
数据库
威哥爱编程13 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
这个DBA有点耶14 小时前
库内计算推理:一条SQL背后的算子融合,和外挂方案差了几次网络往返
数据库·人工智能·sql
威哥爱编程14 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
2601_9679801114 小时前
Python行情API量化 02:顺序拉 20 要 2 秒?并发批量把时间压到 0.5 秒
python·api·限流·并发·量化
伞伞悦读14 小时前
【第81期】特征缩放怎么选:标准化、MinMax 与 Robust 的原理、泄漏对照和完整实验
人工智能·python·深度学习·机器学习
新*15 小时前
从一段 WebSocket 代码聊开:bytes 不是 zlib、binaryType 决定一切,15MB 大消息的零拷贝优化
javascript·python·websocket·性能优化·blob·zlib·arraybuffer