防止列的快速更新

Pervent rapid update of a column

假设我有一个关于我的用户 table 的专栏,名为 current_status 我希望该列的更新间隔至少 5 秒

换句话说,如果代码的一部分应该更新此列,则在此之后的 5 秒内,其他代码应该无法更改它。

我知道 100 种在代码上做的方法,但我想在数据库级别做,主要是因为它是一个大网站,原始程序员不可用!

我在考虑某种触发器或随时间变化的东西? 在这里,现在我该如何应用 5 秒规则?

DELIMITER //
CREATE TRIGGER `status_update` BEFORE update ON `users`
 FOR EACH ROW IF OLD.current_status != NEW.current_status  THEN
  SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Cannot update record for 5 sec ';
END IF
//
DELIMITER ;

我已 table 调用 status_changes 来跟踪这些更改,每次状态更改时我都会向此 table 添加一行

status_changes : id , user_id , timestamp , current_status

这不是一个完美的解决方案,但如果您知道自己在做什么,则可以使用类似这样的方法:

CREATE TRIGGER `status_update`
BEFORE update ON `users`
FOR EACH ROW
  IF (OLD.current_status != NEW.current_status
      AND TIME_TO_SEC(TIMEDIFF(now(), OLD.ts))<5) THEN
      BEGIN
        SET NEW.current_status=OLD.current_status;
        SET NEW.ts=OLD.ts;
      END;
END IF;

(或者您可以像示例中那样使用 SIGNAL 阻止错误更新)。

请看一个fiddle here.