【问题标题】:Updating multiple tables using single trigger使用单个触发器更新多个表
【发布时间】:2014-11-23 10:58:29
【问题描述】:

我在用一个触发器更新 2 个表时遇到问题,它在“New.userid”附近给我一个错误

CREATE TRIGGER userDownloads AFTER INSERT ON Downloads
FOR EACH ROW
UPDATE Project SET PROJECT_DOWNLOADS = PROJECT_DOWNLOADS + 1 WHERE PROJECTID = NEW.ProjectID,
UPDATE User SET NO_OF_DOWNLOADS = NO_OF_DOWNLOADS + 1 WHERE USERID = NEW.UserID;

【问题讨论】:

    标签: mysql sql database phpmyadmin


    【解决方案1】:

    你必须这样写你的触发器:

    DELIMITER //
    CREATE TRIGGER userDownloads AFTER INSERT ON Downloads
    FOR EACH ROW
    BEGIN
      UPDATE Project SET PROJECT_DOWNLOADS = PROJECT_DOWNLOADS + 1 WHERE PROJECTID = NEW.ProjectID;
      UPDATE User SET NO_OF_DOWNLOADS = NO_OF_DOWNLOADS + 1 WHERE USERID = NEW.UserID;
    END//
    

    请看here.

    但是你确定你需要一个触发器吗?你为什么不在你的 Downloads 表上做一个 COUNT 呢?

    SELECT ProjectID, COUNT(*) AS PROJECT_DOWNLOADS
    FROM Downloads
    GROUP BY ProjectID;
    
    SELECT UserID, COUNT(*) AS NO_OF_DOWNLOADS
    FROM Downloads
    GROUP BY UserID;
    

    【讨论】:

    • 我尝试了你之前所说的,我得到了以下错误“#1064 - 你的 SQL 语法有错误;查看与你的 MySQL 服务器版本对应的手册以获取正确的语法以在附近使用'' 在第 4 行“
    • @fana 请查看我更新的答案,我将SEPARATOR 更改为DELIMITER,这是正确的陈述。如果您在控制台上创建 TRIGGER,它将起作用,但如果您使用 PHPMyAdmin 或其他工具,则可能有不同的方式来指定分隔符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-31
    • 2014-12-20
    • 2012-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2016-08-11
    相关资源
    最近更新 更多