4

これが私のコードです

CREATE TRIGGER `agent_maintenance` AFTER DELETE ON `users`
FOR EACH ROW BEGIN
INSERT INTO deleted_agents (agent_id, fullname, email, mobile_no, deleted) 
SELECT user_id, fullname, email, mobile_no, NOW() FROM user_profiles WHERE user_id = OLD.id;
END
//
DELIMITER ;

どうやらテーブルdeleted_agentsには何も挿入されていないようですが
、イベントを変更するとBEFORE DELETE問題なく動作します。
誰が何が悪いのか知っていますか?

EDITED
はい、テーブル user_profiles 内に外部キー制約があります。
基本的に、 table の行userが削除されると、 table の対応する行が削除されますuser_profiles

したがって、外部キー制約アクションの前にトリガーが最初に実行されるという間違った仮定をしています

これを行う最善の方法はAFTER DELETE、テーブル user_profiles 自体でトリガーを使用することです。
残念ながら、mysqlは外部キー制約でトリガーをアクティブにしません

4

1 に答える 1

2

行が削除された後、user_profiles テーブルでカスケード削除トリガーが実行され、WHERE 句で user_id が見つからない可能性がありますか?

于 2013-09-17T20:16:30.013 に答える