【问题标题】:Creating TRIGGER giving errors (MySQL)创建TRIGGER给出错误(MySQL)
【发布时间】:2014-12-21 23:03:33
【问题描述】:

我正在尝试在我的 mysql 数据库中创建一个触发器,但我不断收到错误消息。这是我的查询:

CREATE TRIGGER update_counters AFTER INSERT ON cheats_main FOR EACH ROW
BEGIN
    DELETE FROM meta_info;
    INSERT INTO meta_info (system_id, system, game_count, cheat_count) VALUES (
        SELECT id, system,
        (SELECT count(g1.id) FROM cheats_games g1 WHERE g1.system = s.id) AS games_counter,
        (SELECT count(c2.id) FROM cheats_main c2 JOIN cheats_games g2 ON g2.id = c2.game_id
        WHERE g2.system = s.id) AS cheats_counter 
        FROM systeme AS s
    );
END;

MySQL 表“meta_info”有这样的结构:

system_id | system | game_count | cheat_count | created

我不断收到的错误是:

MySQL 说:文档 1064 - 你有 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在第 3 行的 '' 附近使用正确的语法

第 3 行是:

DELETE FROM meta_info;

当我删除这一行时,我得到了这个错误:

1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用 'SELECT id, system, 附近 (SELECT count(g1.id) FROM cheats_games g1 WHERE g1.system ' 在第 4 行

本例中的第 4 行是:

SELECT id, system (...)

内部 SELECT 工作得很好。我得到一个包含这些列的结果表:

id | system | games_counter | cheats_counter

任何帮助表示赞赏。谢谢。

【问题讨论】:

    标签: php mysql sql database phpmyadmin


    【解决方案1】:

    您需要定义除; 之外的另一个分隔符。否则数据库将在第一个 ; 处停止触发器定义,这将是不完整的

    delimiter |
    CREATE TRIGGER update_counters AFTER INSERT ON cheats_main FOR EACH ROW
    BEGIN
        DELETE FROM meta_info;
        INSERT INTO meta_info (system_id, system, game_count, cheat_count)
            SELECT id, system,
            (SELECT count(g1.id) FROM cheats_games g1 WHERE g1.system = s.id) AS games_counter,
            (SELECT count(c2.id) FROM cheats_main c2 JOIN cheats_games g2 ON g2.id = c2.game_id
            WHERE g2.system = s.id) AS cheats_counter 
            FROM systeme AS s;
    END
    |
    delimiter ;
    

    如果你在插入语句中使用选择,那么就这样使用它

    insert into t1(col1, col2)
    select a, b from t2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-10
      • 2012-06-06
      • 2017-03-24
      • 2010-11-30
      相关资源
      最近更新 更多