gpt4 book ai didi

mysql - SQL触发器不是在行上而是在属性上

转载 作者:行者123 更新时间:2023-11-30 21:59:43 24 4
gpt4 key购买 nike

嘿,伙计们,有一个小问题要问你。我目前正在研究 SQL 触发器,我的目标是在我们的数据库发生更改时存档日志记录。例如,我们有一些像客户这样的表:姓名、名字、出生地等等。我们为用户提供更新他们自己的数据并希望将旧数据保存在新表中以用于日志记录的原因。为了所有更新只有一个日志表,日志表是一种通用的:ID、时间戳、表名、列、旧值、新值。

table_name 是更新后的表,colum 是该表中更新后的列,其余的一切都应该说明一切。因此,不仅要知道更新发生在哪个元组中,还要知道更新发生在哪个特定列中,这将是一件很棒的事情。我的问题:是否有这样的结构:

在插入后在 customer**.firstname** 上创建触发器 logging_trigger ...

仅当“名字”列发生更新时才触发操作?如果没有,是否有一个平滑的解决方案来处理所有可能的更新案例?

谢谢。

最佳答案

我使用的格式与您在我的系统中描述的一样...以下是我如何根据您所需的逻辑完成它。

CREATE DEFINER = CURRENT_USER TRIGGER `testing_schema`.`new_table_BEFORE_UPDATE` BEFORE UPDATE ON `new_table` FOR EACH ROW
BEGIN
IF NEW.ColumnName <> OLD.ColumnName THEN
INSERT INTO HistoryTable (`ColumnName1`, `ColumnName2`, ect..) VALUES (OLD.ColumnName1, OLD.ColumnName2, ect...);
END IF;
END

我的主要区别在于,我没有 IF 条件。每次对该行进行更新/删除时,我只是将整行复制到历史表中。这样我就不必维护任何形式的逻辑来处理调查“发生了什么变化”的场景,我只保存整行因为我知道“某些事情”发生了变化。

关于mysql - SQL触发器不是在行上而是在属性上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43770930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com