gpt4 book ai didi

即使一切正确,更新后的 MySql 触发器也不会更新

转载 作者:行者123 更新时间:2023-11-29 13:32:44 25 4
gpt4 key购买 nike

Tab_1

"id"    "name"      "addr"  "country"   "status"
"1" "norman" "1st" "US" "2"
"2" "kirk" "2nd" "US" "2"

Tab_2

"id"    "name"      "addr"  "country"   "pos"   "total"
"1" "norman" "1st" "US" "0" "0"
"2" "kirk" "2nd" "US" "0" "0"

Tab_1 上的 update 后,我使用以下触发器来update Tab_2,当 Tab_1 设置为 0。问题是,即使它是正确的,它也不会做任何事情。我该如何正确设置?

CREATE DEFINER=`root`@`localhost` TRIGGER `tab_2_upd` AFTER UPDATE ON `tab_1` 
FOR EACH ROW BEGIN
if new.status = '0' then
update tab_2 set pos = pos+1, total = total+1 where id = new.id;
//Should it be new.id or old.id? I tried both but still no luck.
end if;
END

最佳答案

这是由于您没有更改分隔符而导致多个语句被破坏的另一种情况。这是一个非常常见的错误。

试试这个:

DELIMITER $$

DROP TRIGGER IF EXISTS `tab_2_upd`$$

CREATE DEFINER=`root`@`localhost` TRIGGER `tab_2_upd` AFTER UPDATE ON `tab_1`
FOR EACH ROW BEGIN
if new.status = '0' then
update tab_2 set pos = pos+1, total = total+1 where id = new.id;
end if;
END$$

DELIMITER ;

ON UPDATE 触发器同时具有 OLD 和 NEW 值,并且由于我认为 id 的值不会改变(不应该),所以使用任何值都是安全的(旧的或新的)。

关于分隔符有一个很好的答案 here .

关于即使一切正确,更新后的 MySql 触发器也不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19178664/

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