【问题标题】:Trigger isn't working, error inserting into another table upon insert触发器不起作用,插入时插入另一个表时出错
【发布时间】:2015-07-14 02:02:54
【问题描述】:

我正在尝试在将记录插入主表时将新记录插入表中。但是它甚至没有注册为触发器......

 DELIMITER $$
    CREATE TRIGGER trigger_InsertRoleplay ON `users`
    FOR INSERT AS
    BEGIN

        INSERT INTO 
        `roleplay_users`
        (
            id
        )
        SELECT 
            id
        FROM 
            INSERTED
    END$$
    DELIMITER ;

返回的错误。

    CREATE TRIGGER trigger_InsertRoleplay ON `users`
FOR INSERT AS
BEGIN

    INSERT INTO 
    `roleplay_users`
    (
        id
    )
    SELECT 
        id
    FROM 
        INSERTED
END;
/* SQL Error (1064): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON `users`
FOR INSERT AS
BEGIN

    INSERT INTO 
    `roleplay_users`
    ' at line 1 */
/* Affected rows: 0  Found rows: 0  Warnings: 0  Duration for 0 of 1 query: 0.000 sec. */

【问题讨论】:

    标签: mysql triggers innodb


    【解决方案1】:

    如果您使用的是 MySQL,那么您可能想要这样的东西:

    DELIMITER $$
    
    CREATE TRIGGER trigger_InsertRoleplay AFTER INSERT ON `users`
    FOR EACH ROW
    BEGIN
        INSERT INTO roleplay_users(id)
            SELECT new.id;
    END$$
    DELIMITER ;
    

    INSERTED 是 SQL Server 使用的东西,而不是 MySQL。

    【讨论】:

    • @king 。 . .除了反引号外,您的整个触发器都使用 SQL Server 语法。您需要确定它是“插入后”还是“插入前”触发器。我建议您阅读有关此主题的 MySQL 文档:dev.mysql.com/doc/refman/5.6/en/trigger-syntax.html.
    • 感谢您提供的信息。 prntscr.com/7serdu 我使用 Navicat 将触发器设置为“插入后”触发器。但没有占上风。
    • 也许更简单? INSERT INTO roleplay_users (id) VALUES (new.id);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    相关资源
    最近更新 更多