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)。我该如何编写触发器?
在阅读了一些评论后,我将代码更改为:
create trigger cal_retweet before update on T
for each row
begin
set NEW.retweet_change = NEW.retweet_count - OLD.retweet_count;
end;
仍有语法错误
答案 0 :(得分:1)
此触发器存在多个问题。
您有一些语法错误。您需要使用适当的分号来分隔您的陈述。
您的WHERE
语句不合适(实际上不需要)。您一次只能处理一行,您不必在id_str
上匹配。
要使用行中的现有值计算计算,您需要访问OLD
关键字。为此,您需要在UPDATE
上发生触发,而不是INSERT
。在INSERT
,retweet_change
与retweet_count
完全相同;您可以更改INSERT
语句来解决该问题。
您可能需要根据以下评论明确添加语句分隔符。
总而言之,我认为这个触发器应该是这样的:
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 ;