添加新记录时MySql触发错误

时间:2012-05-15 01:24:49

标签: php mysql triggers

我刚学会了MySQL触发器及其工作原理。我决定在我的小网站上申请。

我有一个用户表,其中创建了新用户帐户,我想保留在UsersHistory表中添加新帐户的历史记录。

错误是当我执行以下查询时,它给出了一个错误:

查询:

CREATE TRIGGER User_After_Insert 
AFTER INSERT ON UsersHistory FOR EACH ROW WHEN NOT NEW.Deleted 
BEGIN                  
    SET @changeType = 'DELETE';  

    INSERT INTO UsersHistory (UserID, changeType) 
    VALUES (NEW.ID, @changeType);    
END;

CREATE TRIGGER User_After_Insert1 
AFTER INSERT ON UsersHistory FOR EACH ROW WHEN NEW.Deleted 
BEGIN              
    SET @changeType = 'NEW';  

    INSERT INTO UsersHistory (UserID, changeType) 
    VALUES (NEW.ID, @changeType);        
END;

错误是:

  

1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在“WHEN NOT NEW.Deleted”附近使用正确的语法       开始Â
      在第1行设置@changeType ='DELE'

我找了一个解决方案,但我找不到。

由于

1 个答案:

答案 0 :(得分:1)

您是否将DELIMITER设置为与“;”不同的值?另外,我看到了一些我不知道在mysql中支持的东西(BEGIN块之前的WHEN语句),所以继承我的建议:

delimiter //
CREATE TRIGGER User_After_Insert AFTER INSERT ON UsersHistory FOR EACH ROW
INSERT INTO UsersHistory (UserID, changeType) VALUES (NEW.ID, 'NEW')//
CREATE TRIGGER User_After_Delete AFTER DELETE ON UsersHistory FOR EACH ROW              
INSERT INTO UsersHistory (UserID, changeType) VALUES (OLD.ID, 'DELETE')//
delimiter ;

<强>更新

由于你的评论如下,我认为你需要阅读触发器更多的配合。但这是要点。

以上语句,在实际数据库中创建触发器。实际上,您可以在数据库模式中“安装”触发器。如果您具有适当的帐户权限,则在任何mysql客户端中运行语句都将创建触发器。

现在,从这个阶段开始,你不要从PHP或类似的东西中明确地调用它们。它们存在于数据库中,并在您执行某些操作时自动调用。在上述情况下,从UserHistory中删除记录或在将记录插入UserHistory之后。

因此,当您从php脚本运行“INSERT INTO UserHistory VALUES ...”时,数据库将自动触发触发器。

希望有所作为。