【问题标题】:Trigger takes current_timestamp and if older than 15 minutes, insert into other table触发器需要 current_timestamp,如果超过 15 分钟,则插入其他表
【发布时间】:2013-05-29 20:27:32
【问题描述】:

我必须创建一个触发器,它需要一个 current_timestamp + 分钟,并说如果它比 current_timestamp 旧,它应该插入一个新表。

我已经玩了 8 个小时了,但似乎无法让它发挥作用。有没有人可以解决这个问题?

这是我的想法:

DELIMITER //
CREATE TRIGGER create_comment
AFTER UPDATE ON aflaesning
FOR EACH ROW 
BEGIN 
IF (TIME_TO_SEC(OLD.forventetSlut) < TIME_TO_SEC(NEW.aktuelSlut-900)) THEN
INSERT INTO aflaesningkommentar(aflaesningaflaesning,aflaesning_id) VALUES('That was too late',     NEW.aflaesnings_id);
END IF;
END;
DELIMITER//

它从表 Loadings 中获取 TIMESTAMP (ExpectedEnd),如果时间戳早于分钟,则必须将该行放入表中。但它在 END IF//

上出错

提前致谢

【问题讨论】:

  • 您能否提供您遇到的确切错误?它可以帮助其他人帮助您解决问题。

标签: mysql sql triggers timestamp


【解决方案1】:

主要问题是您使用的分隔符。您应该在END IF 之后使用分号,然后在触发器末尾的END 之后使用//(这也是缺失的)。

另外,与错误无关,我认为您的条件是错误的。你可能想这样做:

IF (TIME_TO_SEC(OLD.forventetSlut) < TIME_TO_SEC(NEW.aktuelSlut)-900) THEN

而不是这个:

IF (TIME_TO_SEC(OLD.forventetSlut) < TIME_TO_SEC(NEW.aktuelSlut-900)) THEN

所以是这样的:

DELIMITER //
CREATE TRIGGER create_comment
AFTER UPDATE ON aflaesning
FOR EACH ROW 
BEGIN 
IF (TIME_TO_SEC(OLD.forventetSlut) < TIME_TO_SEC(NEW.aktuelSlut)-900) THEN
INSERT INTO aflaesningkommentar(aflaesningaflaesning,aflaesning_id) VALUES('That was too late',     NEW.aflaesnings_id);
END IF;
END //
DELIMITER;

【讨论】:

    【解决方案2】:

    尝试将您的 IF 条件更改为:

    IF (TIME_TO_SEC(OLD.forventetSlut) - TIME_TO_SEC(NEW.aktuelSlut) < -900) THEN
    

    另外,将最后一个END 后面的分号更改为//

    最后,尝试从源代码中删除所有空格并替换为空格和换行符。 Mysql 无法处理触发源中的制表符。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 2010-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-16
      • 1970-01-01
      相关资源
      最近更新 更多