我非常喜欢深入研究我昨天在这篇文章中描述的解决方案,使用不可见列和触发器生成表审计信息。在本文中,我更关注使用JSON列存储审计信息的解决方案。当然还可以跟踪所有更改,不仅可以跟踪最后一次更改,还可以保留有关更改内容的信息。我想用一个例子来说明这一点:
当然,我们也可以搜索审计信息。例如,让我们搜索所有已修改的记录,以及旧名称或新名称是/是frederic的位置:
我们可以验证,确实该记录将frederic作为初始值。
触发器
与昨天相比,只有更新时的触发器有所不同:
DELIMITER $$
drop trigger demo2_update$$
create trigger demo2_update before update on demo2
for each row
BEGIN
declare modif json default null;
declare modif_arr json default null;
select json_object('updated_at', now(),
'updated_by', session_user()) into modif;
if old.id <> new.id then
select json_merge_patch(modif,
json_object('id',
json_object("old", old.id,
"new", new.id)
)
) into modif;
end if;
if old.firstname <> new.firstname then
select json_merge_patch(modif,
json_object('firstname',
json_object("old", old.firstname,
"new", new.firstname)
)
) into modif;
end if;
if old.lastname <> new.lastname then
select json_merge_patch(modif,
json_object('lastname',
json_object("old", old.lastname,
"new", new.lastname)
)
) into modif;
end if;
if json_extract(old.audit_info, "$.modifications")
is NULL then
set new.audit_info=json_merge_patch(old.audit_info,
json_set(old.audit_info,
"$.modifications", modif));
else
set new.audit_info=json_merge_patch(old.audit_info,
json_array_append(old.audit_info,
"$.modifications", modif));
end if;
END$$
DELIMITER ;
复制
所有魔法都包含在上面的触发器中😉
现在,最好有一个存储过程或脚本,可以添加不可见的JSON列,并为要保留审计信息的表的每一列自动生成这些触发器(并将其删除)。
享受MySQL!
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【MySQL 30周年庆】MySQL 8.0 OCP考试限时免费!教你免费领考券
墨天轮小教习
3297次阅读
2025-04-25 18:53:11
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
严少安
907次阅读
2025-04-25 15:30:58
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
535次阅读
2025-04-17 17:02:24
MySQL 9.3 正式 GA,我却大失所望,新特性亮点与隐忧并存?
JiekeXu
457次阅读
2025-04-15 23:49:58
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
383次阅读
2025-04-15 14:48:05
MySQL 8.0 OCP 1Z0-908 考试解析指南(二)
JiekeXu
351次阅读
2025-04-30 17:37:37
记录MySQL数据库的一些奇怪的迁移需求!
陈举超
303次阅读
2025-04-15 15:27:53
SQL优化 - explain查看SQL执行计划(下)
金同学
297次阅读
2025-05-06 14:40:00
MySQL 30 周年庆!MySQL 8.4 认证免费考!这次是认真的。。。
数据库运维之道
293次阅读
2025-04-28 11:01:25
MySQL 8.0 OCP 1Z0-908 考试题解析指南
青年数据库学习互助会
291次阅读
2025-04-30 12:17:54