gpt4 book ai didi

php - MySql 添加新记录时触发错误

转载 作者:行者123 更新时间:2023-11-29 14:27:50 26 4
gpt4 key购买 nike

我刚刚了解了 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 - 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 'WHEN NOT NEW.Deleted BEGIN Â
SET @changeType = 'DELE' at line 1

我寻找解决方案,但找不到。

谢谢

最佳答案

您是否将 DELIMITER 设置为不同于“;”的内容?另外,我看到了一些我不知道 mysql 支持的东西(BEGIN block 之前的 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 ...”时,数据库将自动触发触发器。

希望这是有道理的。

关于php - MySql 添加新记录时触发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10593066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com