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

yh2wf1be  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(349)

hy,这个触发器会给我整个表的所有更改记录,但我想得到最后更改的行共享代码。

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;

谢谢

cbjzeqam

cbjzeqam1#

编写一个查询,如 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;

相关问题