0

我正在经营一家精益创业公司。虽然我们对硬件故障有很好的安全性,但我们经常需要通过直接在实时数据库上运行 SQL 查询来操作客户数据。很容易出错(比如认为您正在测试数据库上运行删除查询,而实际上您是直接在实时数据库上运行查询)。我想知道是否可以为针对数据库运行的每个 SQL 查询创建“撤消”功能(如果有人直接通过 PSQL 连接)。我不关心性能,也不关心存储空间,因为安全数据是我唯一关心的。

如果 UNDO 功能可以不撤消事务日志中的某些特定事务,那就太好了,这样后退就不会干扰正确的事务,例如新客户注册。我们的此类交易量非常少,因此可以毫无问题地手动查看它们。

4

1 回答 1

1

好吧,我认为您唯一的选择是创建一个历史记录表。我在触发器的帮助下完成了这项工作。

在每次更新时,您为每个更改的值插入一行。

我的历史表如下所示(MySql):

CREATE  TABLE IF NOT EXISTS `history` (
  `id_history` INT NOT NULL AUTO_INCREMENT ,      
  `event` ENUM('INSERT', 'UPDATE', 'DELETE') NOT NULL ,
  `table` VARCHAR(255) NOT NULL ,
  `id` INT NOT NULL ,
  `field` VARCHAR(255) NULL ,
  `old_value` TEXT NULL ,
  `datetime` DATETIME NOT NULL ,
PRIMARY KEY (`id_history`);

和触发器:

    CREATE TRIGGER test_table_update BEFORE UPDATE ON test_table
    FOR EACH ROW
    BEGIN
        IF OLD.value1 != NEW.value1 THEN
            INSERT INTO history VALUES(NULL, 'UPDATE', 'test_table', OLD.id_test_table, 'value1', OLD.value1, NOW());
        END IF;

        ...

    END; //

使用此信息,您可以撤消所有更改并将其设置回特定日期。

于 2013-01-04T14:14:17.880 回答