【问题标题】:mysql trigger to keep track of how often a column was updatedmysql 触发器跟踪列的更新频率
【发布时间】:2023-02-07 02:16:49
【问题描述】:

我在桌子上有一列“processed_at”。这可以从代码中的多个位置重置,以向作业指示该行需要处理。我想了解如何将 processed_at 设置为 null。

最简单的方法是什么?理想情况下,我会通过行 ID 知道这种情况发生的频率,但也可以只知道在特定时间段内合并的所有行的数字。

可以这样做吗: 对更新作出反应然后将 id 和重置时间戳存储到单独的表中的触发器? 这会对原始查询的性能产生显着影响吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    是这样的:

    create table mytable_resets (
      id serial primary key,
      mytable_id bigint unsigned not null,
      reset_at datetime not null
    );
    
    delimiter ;;
    
    create trigger t after update on mytable
    for each row begin
      if NEW.processed_at is null then
        insert into mytable_resets values (default, NEW.id, NOW());
      end if;
    end;;
    
    delimiter ;
    

    是的,它会影响原始查询的性能。

    数据库写入的成本大致与其更新的索引数量成正比。如果您的查询执行触发器以插入另一个表,它会添加另一个索引更新。在这种情况下,mytable_resets 表的主键索引。

    【讨论】:

      猜你喜欢
      • 2016-04-30
      • 2013-08-17
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-17
      相关资源
      最近更新 更多