【问题标题】:SQL trigger with WHEN and UPDATE statements带有 WHEN 和 UPDATE 语句的 SQL 触发器
【发布时间】:2019-07-31 07:41:38
【问题描述】:

我正在编写以下代码,在向“ecoute”表插入后,该代码应该从“song”表中增加 1 个“likecount”。 在这样做之前,触发器会检查来自新插入的布尔值“喜欢”是否为“真”。如果是这样,那么更新继续。否则,什么都不会发生。

CREATE TRIGGER likked AFTER INSERT ON ecoute
FOR EACH ROW
WHEN (NEW.likked)
BEGIN
    UPDATE songs
    SET songs.likecount = songs.likecount +1
    WHERE songs.id = NEW.songid
END

MySQL 回答:

#1064 - Syntax error near 'WHEN (NEW.likked)
BEGIN
    UPDATE songs
    SET songs.likecount = songs.like' at line 3

注意事项: 到目前为止,我一直在尝试创建不同的 JOIN,因为我认为问题是我在更新 SONGS 表时调用了 NEW 表,但 MySQL 的答案保持不变。

【问题讨论】:

  • 我根本不知道 when 是 MySQL 中创建触发器语法的一部分。
  • 那我可能错了。我承认我是一个完全的编码初学者。我应该改用什么?

标签: mysql sql triggers


【解决方案1】:

这是你想要的吗?

DELIMITER $$
CREATE TRIGGER likked AFTER INSERT ON ecoute
FOR EACH ROW
BEGIN
    IF NEW.likked = 1 THEN
        UPDATE songs
            SET songs.likecount = songs.likecount +1
            WHERE songs.id = NEW.songid
    END IF;
END;

DELIMITER ;

【讨论】:

  • 该死的……你又打败了我:-)
  • 确实,这似乎正是我想要做的。但是由于未知原因,当我尝试执行 MySQL 时,它返回“发生意外错误”。
  • (NEW.likked) 部分困扰了它。使用 NEW.likked = 1 代替工作。非常感谢您的回答。
  • @Benjamin.P。 . . likked 的数据类型是什么?我真的很惊讶= 在 MySQL 中是必需的。
【解决方案2】:

使用 IF THEN 测试检查喜欢的值

DELIMITER $$
CREATE TRIGGER likked AFTER INSERT ON ecoute
FOR EACH ROW
BEGIN
    IF NEW.likked=1 THEN 
        BEGIN
            UPDATE songs
            SET songs.likecount = songs.likecount +1
            WHERE songs.id = NEW.songid;
        END; 
    END IF; 
END$$
DELIMITER ;

【讨论】:

  • 完美运行。谢谢 !我犯的另一个错误是我检查 NEW.likked 的方式。我不知道为布尔值写“=1”是有效的。谢谢!
  • 我预计它确实是一个布尔值。自豪地击败了@GordonLinoff,一次:-)
猜你喜欢
  • 2015-12-07
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
相关资源
最近更新 更多