防止快速更新列

时间:2015-04-11 11:07:25

标签: mysql triggers

所以我想在我的用户表上有一个名为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 ;

我有一个名为status_changes的表用于跟踪这些更改,每次状态更改时我都会在此表中添加一行

status_changes:iduser_idtimestampcurrent_status

1 个答案:

答案 0 :(得分:0)

这不是一个完美的解决方案,但如果你知道你在做什么,你可以使用这样的东西:

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来阻止更新,例如你的例子)。

请查看小提琴here