我正在考虑如何在应用程序中最好地实现Audit Trail,该应用程序由MySQL支持。一些系统访问相同的数据库和表,所以我认为触发器是最好的解决方案。
但是,我不想为每个表手动编写触发器,因此我希望自动记录每个插入/删除的字段名称和数据。
类似的东西:
INSERT INTO `audits` SET
`table_name` = 'jobs',
`table_key` = OLD.`id`,
`changed_at` = NOW(),
`notes` = (SELECT * FROM NEW);
但是,subselect将返回单行结果集,不能将其视为字符串。我想要一个将该行转换为:
的函数"id = 1, name = 'something', another_field = 'data'"
或类似的东西。
编辑:这里的要点是我不想输入每个表中的每个字段。有超过120个表,有些有> 100个领域。如果在MySQL本身不可能,我想我会写一个小程序来旋转每个表和字段并为我生成SQL。
答案 0 :(得分:1)
SELECT CONCAT('id = ', id, ', name = ''', name, ''', another_field = ''', data, '''')
FROM NEW
答案 1 :(得分:0)
答案 2 :(得分:0)
你可以连接字符串。
e.g:
select concat("id = ", t.id, "name = ", t.name) from myTable t;
答案 3 :(得分:0)
我最终编写了一个PHP脚本来遍历每个相关的表并为我构建触发器。