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"
私は後に、トリガーの下に使用しているupdate
上Tab_1
に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
これは、区切り文字を変更していないために複数のステートメントが壊れているもう1つのケースです。これはかなり一般的なエラーです。
これを試して:
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
変更されることはないと思うので(変更すべきではない)、任意の値(OLDまたはNEW)を使用しても安全です。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加