mysql - 讨论数据库表更改的触发器
问题描述
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;
谢谢
解决方案
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;
推荐阅读
- java - @OneToMany 针对未映射的类,但类已映射
- ios - 我怎样才能“冻结”一个collectionView它在哪里?
- python - 使用 pipenv 安装 django-heroku 时出错
- javascript - 如何在javascript中的每次点击时在数组内创建子对象
- python - 处理缺失值:当大多数列(重要的列)缺少 99% 的数据时
- c++ - 为什么使用程序会导致我的形状消失?
- python - 是否有另一种方法可以在不使用变量的情况下输入索引?
- html - CSS 多张背景图片,一张使用样式表,另一张使用内联
- flutter - 我如何理解容器“尽可能小”
- c++11 - 函数“if constexpr”和“else if constexpr”的返回