我想为我的sql数据库提供某种修订控制历史记录。
我希望这个表能够在更新时记录谁,删除了什么等等。
我使用Perl连接到MySQL。
答案 0 :(得分:7)
方法1:创建单独的“审核”表并使用triggers填充信息。
以下是MySQL(和Postrges)的简要指南:http://www.go4expert.com/forums/showthread.php?t=7252
方法2:从Perl数据库访问代码中填充审核信息。理想情况下,作为同一交易的一部分。第一种方法并没有明显的胜利和许多缺点(你没有抓住你的代码外面的变化,一个)
答案 1 :(得分:1)
**免责声明:我过去遇到过这种情况,但是在PHP中。概念适用于PHP,但可以通过一些思考应用于perl。
我想到了为每个表AFTER INSERT
,AFTER UPDATE
,AFTER DELETE
添加触发器的想法
完成同样的事情。这个问题是:
CURRENT_USER
)无论哪种方式,对于我的情况,我发现最佳的行动方案是在应用层(而不是DB层):
如果操作正确,将跟踪您为更新任何表而执行的任何操作。我不得不为特定表添加一些覆盖以不跟踪(例如,在'track_table'表上跟踪插入的重点是什么)。这是一个示例表跟踪模式:
CREATE TABLE `track_table` (
`id` int(16) unsigned NOT NULL,
`userID` smallint(16) unsigned NOT NULL,
`tableName` varchar(255) NOT NULL DEFAULT '',
`tupleID` int(16) unsigned NOT NULL,
`date_insert` datetime NOT NULL,
`action` char(12) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `userID` (`userID`),
KEY `tableID` (`tableName`,`tupleID`,`date_insert`)
) ENGINE=InnoDB