gpt4 book ai didi

MySQL触发器没有被触发?

转载 作者:行者123 更新时间:2023-11-29 06:10:08 24 4
gpt4 key购买 nike

所以这应该是一个相当直接的触发器,但我的 MySQL 不是很好,所以这无疑是我的失败。
它根本不更新统计表,尽管它应该更新;

DROP TRIGGER countryUpdate;

DELIMITER //

CREATE TRIGGER countryUpdate AFTER INSERT ON stats
FOR EACH ROW BEGIN
DECLARE NewIP varchar(16);
DECLARE NewCountry varchar(80);
SET NewIP = inet_aton(new.vis_ip);
SET NewCountry = (SELECT country FROM iptocountry WHERE lower_bound <= NewIP AND upper_bound >= NewIP)
UPDATE stats
SET Country = NewCountry

END //

DELIMITER;

最佳答案

好吧,首先,您的 UPDATE(如果它确实有效的话)正在更改 stats 表中的所有 行,及其作用对于插入的每一行。这确实没有多大意义。至少,您需要添加一个 where 子句以仅命中刚刚插入的一行。

但显然,这在 MySQL 中根本不起作用,因为 "a stored function or trigger cannot modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger." (查看“存储函数的限制”)

因此,您需要在插入之前使用 a 触发器,并执行 SET new.country = NewCountry 在插入之前修复该行。

关于MySQL触发器没有被触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9528167/

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