带触发器

时间:2017-09-06 21:26:47

标签: mysql sql

create trigger cal_retweet before insert on T
for each row begin 
set NEW.retweet_change = NEW.retweet_count - retweet_count where id_str = NEW.id_str
end

SQL说“where id_str = NEW.id_str”

附近有语法错误

我的表看起来像这样。其中id_str是特定推文的唯一标识符。由于我每分钟从一个用户插入50条推文,因此会有很多相同的id_str。我想看的是每分钟转换retweet_count。 tweeted_at是用户发推文时,created_at是将此数据插入到我的数据库中。我想为插入数据库的每个新数据生成retweet_change,而不是相同的旧推文(进入列retweet_change)。我该如何编写触发器?

enter image description here

在阅读了一些评论后,我将代码更改为:

create trigger cal_retweet before update on T
for each row 
begin 
set NEW.retweet_change = NEW.retweet_count - OLD.retweet_count;
end;

仍有语法错误

1 个答案:

答案 0 :(得分:1)

此触发器存在多个问题。

  1. 您有一些语法错误。您需要使用适当的分号来分隔您的陈述。

  2. 您的WHERE语句不合适(实际上不需要)。您一次只能处理一行,您不必在id_str上匹配。

  3. 要使用行中的现有值计算计算,您需要访问OLD关键字。为此,您需要在UPDATE上发生触发,而不是INSERT。在INSERTretweet_changeretweet_count完全相同;您可以更改INSERT语句来解决该问题。

  4. 您可能需要根据以下评论明确添加语句分隔符。

  5. 总而言之,我认为这个触发器应该是这样的:

    DELIMITER //
    CREATE TRIGGER cal_retweet BEFORE UPDATE ON T
      FOR EACH ROW
      BEGIN 
        SET NEW.retweet_change = NEW.retweet_count - OLD.retweet_count;
      END;//
    DELIMITER ;