Mysql 错误地快速更新列

Mysql 错误地快速更新列,mysql,triggers,Mysql,Triggers,假设我的用户表中有一列名为current\u status 我希望该专栏的更新之间至少有5秒的间隔 换句话说,如果代码的一部分应该更新此列,那么在此之后的5秒钟内,其他代码都不能对其进行更改 我知道100种在代码上进行tat的方法,但我想在数据库级别上进行,主要是因为它是一个大型网站,而原始的编程程序不可用 我在想什么触发装置或者什么能随着时间而起作用的东西? 在这里,现在我如何对其应用5秒规则 DELIMITER // CREATE TRIGGER `status_update` BEFORE

假设我的用户表中有一列名为
current\u status
我希望该专栏的更新之间至少有5秒的间隔

换句话说,如果代码的一部分应该更新此列,那么在此之后的5秒钟内,其他代码都不能对其进行更改

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

我在想什么触发装置或者什么能随着时间而起作用的东西? 在这里,现在我如何对其应用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\u changes
的表,用于跟踪这些更改,每次状态更改时,我都会在此表中添加一行


状态更改:
id
用户id
时间戳
当前状态
这不是一个完美的解决方案,但如果你知道你在做什么,你可以使用这样的方法:

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;
CREATE TRIGGER`status\u update`
更新“用户”之前`
每行
IF(OLD.current_status!=NEW.current_status

和时间到秒(TIMEDIFF(now(),OLD.ts))我肯定我昨天看到了这个问题。无论如何。创建另一个表,该表有一个字段,定义为
last\u update datetime
。将其初始化为过去的某个时间。然后在触发器中检查该字段的值。如果超过5秒,则允许更新,并将该字段的值更新为e> NOW()
。如何检查触发器中的时间是否超过5秒?您可以存储上次插入内容的时间,并根据that@pala_thanx,我知道我要的是语法,很明显,它类似于
时间到秒(TIMEDIFF(now(),column))@max ts是当前的时间戳,你需要以某种方式存储它,但你应该已经有了它…看看这个页面这个触发器将允许对其他字段进行更改,但不允许对
current\u status
ts
thanx进行更改,是的,我在发布问题并查看fiddle代码后立即得到了它,我确实删除了它,但ap不管怎么说,你都看到了!又是thanx