为什么我在插入更新来自同一个表的数据后无法使用触发器?

时间:2017-06-10 19:19:54

标签: mysql triggers

我正在做一个tweeter项目,我在数据库方面遇到了麻烦。我创建了下一个表来管理twets。其中一个属性是“isRetweet”,它将存储转发的推文的id。另一个是retNum,它将存储转发推文的时间。

create table tweets(
  tweetId int auto_increment,
  userId int not null,
  tweetText varchar(140) not null,
  createDate TIMESTAMP DEFAULT current_timestamp,
  retNum int DEFAULT 0,
  loveNum int DEFAULT 0,
  commNum int DEFAULT 0,
  isRetweet int DEFAULT -1, 
   PRIMARY key (tweetId),
   foreign key (userId) references users(userId)
);

这是我的问题。

我创建了一个TRIGGER,负责在tweets表中插入新推文后更新retNum。因此,如果isRetweet id与-1不同,并且有一条带有此id的推文,我想用+1更新其retNum。

我创建了这个触发器来实现它。

/*Retweet TRIGGER*/
DROP TRIGGER IF EXISTS addRetwet;\\
CREATE TRIGGER addRetweet AFTER INSERT ON tweets
FOR EACH ROW
BEGIN
    UPDATE tweets SET retNum = retNum + 1 WHERE tweetId = New.isRetweet;
END;\\

当我尝试插入新推文时出现问题。它给出了下一个错误:

Can't update table 'tweets' in stored function/trigger because it is already used by statement which invoked this stored function/trigger

你知道为什么它会给我这个错误吗?我该如何解决呢?

谢谢你。

0 个答案:

没有答案