mysql - 如何在 MySQL 表中添加自动 "Stale"列

标签 mysql triggers

我有一个包含“陈旧” bool 列的表。它一开始总是正确的。然后,用户可以执行一个操作(将行中的数据推送到缓存中),将陈旧值设置为 false。

但是,无论何时更新行,陈旧值都应自动再次设置为 true。我试过用触发器来解决这个问题:

DROP TRIGGER IF EXISTS `update_tbl_stale`

CREATE TRIGGER `update_tbl_stale` BEFORE UPDATE ON `tbl`
FOR EACH ROW BEGIN
  SET NEW.stale = 1;
END

这里的问题是我不能将 stale 设置为 0,因为它会自动设置回 1。是否有某种 if 语句我可以放入该触发器中以仅使其生效如果更新语句没有显式地将 stale 设置为 0,该怎么办?或者这是我必须在代码中处理的事情吗?

最佳答案

在我看来你需要寻找触发器在之前为 1 之后被明确设置为 0 的情况,在这种情况下允许它为零:

CREATE TRIGGER `update_tbl_stale` BEFORE UPDATE ON `tbl`
FOR EACH ROW BEGIN
  SET NEW.stale = IF(NEW.Stale=0 AND OLD.Stale=1,0,1);
END

关于mysql - 如何在 MySQL 表中添加自动 "Stale"列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8747604/

相关文章:

mysql - 自动更新特定行的数据库表特定列

php - 限制共享主机上 IP 的资源使用

MySQL 触发器 : move to trash

MySQL - 你能检索列的默认值吗?

mysql - 在 mysql 中使用临时文件排序是个坏主意吗?

MySQL 触发器、 View 、单独的表或忠诚度积分的即时计算?

oracle - 是否可以锁定触发器;如何确定它是?

mysql - 不同行的列总和

MySQL 组合特定字段

php - 如何配置工作流程以通过 API 调用返回 json 输出