讨论数据库表更改的触发器

时间:2018-07-18 05:51:43

标签: mysql database oracle triggers grant

为什么, 此触发器将为我提供整个表的记录,其中包含所有更改,但是我想让最后更改的行共享代码。

Create Or Replace Trigger TRG_check IN
Before insert or update
on temp_checkin
FOR each ROW
BEGIN
INSERT INTO temp_checkin_history
select * from temp_checkin
where temp_checkin.id = temp_checkin.id;
END;

谢谢

1 个答案:

答案 0 :(得分:1)

编写诸如INSERT INTO SELECT *之类的查询而未指定列是一种不好的做法。同样,也无需像执行操作那样从触发器所有者表中进行选择。而是使用:NEW关键字并指定所有列。您可以将触发器写为

CREATE OR REPLACE TRIGGER trg_check BEFORE
    INSERT OR UPDATE ON temp_checkin
    FOR EACH ROW
BEGIN
    INSERT INTO temp_checkin_history (
        id,
        col1,
        col2,
        col3
    ) --other columns
     VALUES (
        :new.id,
        :new.col1,
        :new.col2,
        :new.col3
    ); -- other columns prefixed by :NEW

END;