0
create table branch_audit 
    (br_branchno varchar(4),
     br_branchname varchar(20),
     br_street varchar(40) not null unique,
     br_city varchar(20),
     br_state varchar(2),
     br_zipcode varchar(5),
     br_phone varchar(10),
     br_fax varchar(10),
     br_per_mgt_fee decimal(5,2),
     br_email varchar(25),

     constraint br_primarykey primary key (br_branchno));

上面的行创建了与“分支”表具有相同架构的审计表,以便它可以捕获所有已删除的旧数据

这是触发器语句,非常基本的形式,我想知道是否有办法保持其简单性:

CREATE TRIGGER trigger_deleteon
AFTER DELETE 
ON branch
FOR EACH ROW
INSERT INTO branch_audit VALUES(select * from branch);

DELETE FROM Branch WHERE CL_CLIENTNO = 'B001';

我会尽力在这里解释。所以我希望代码在触发器被激活后获取删除的值,然后获取已删除的元组(行)并将其存储在我创建的审计表中,以便跟踪对数据库的修改。

上面带下划线的语句是必须更改为仅捕获已删除元组的语句,当前它捕获每个元组而不是仅捕获更新的元组。

4

2 回答 2

1

OLD您可以通过MySQL 触发器中的关键字访问已删除行的值。像下面这样的东西应该可以工作,其中...将被所有其他属性替换。

CREATE TRIGGER trigger_deletion
    BEFORE DELETE ON branch
    FOR EACH ROW
    BEGIN 
        INSERT INTO branch_audit VALUES(OLD.br_branchno, 
            OLD.br_branchname, OLD.br_street, ...);
    END;
于 2013-06-09T13:29:00.500 回答
1

您可以使用BEFORE DELETE触发器而不是AFTER DELETE以下方式

CREATE TRIGGER trigger_deleteon
BEFORE DELETE ON branch
FOR EACH ROW
    INSERT INTO branch_audit 
    SELECT * 
      FROM branch
     WHERE br_branchno = OLD.br_branchno; 

这是SQLFiddle演示

于 2013-06-09T15:05:02.503 回答