次の 3 つのテーブルがあります;
リーリー次の手順を使用して、2 つのテーブルのデータを別のテーブルにマージしようとしています;
リーリーhm_deliverylog の挿入イベントの前にトリガーを作成し、次のようにプロセスを呼び出します;
リーリー上記の手順により、hm_deliverylog および hmdeliverylog_recipients にレコードが作成されると、データがマージされ、mlog に新しいレコードが作成されます。ただし、常に最初のレコードがスキップされ、1 レコード遅れて続きます (申し訳ありませんが、私の英語がこの状況を説明するのに十分ではありません)。次のように説明します。
1-3 つのテーブルのすべてのレコードを削除しました
2- 最初のレコードを hm_deliverylog と hm_deliverylog_recipients に挿入します
3- mlog に予期されたレコード: 作成されません
4- hm_deliverylog と hm_deliverylog_recipients に 2 番目のレコードを作成します
5- mlog には 2 つのレコードが必要です: 最初のレコードは mlog に作成されますが、2 番目のレコードは作成されません
6- hm_deliverylog と hm_deliverylog_recipients に 3 番目のレコードを作成しました
7-mlog に 3 つのレコードが予想されました: mlog に 2 番目のレコードが作成されましたが、3 番目のレコードはありませんでした
これが問題です。mlog の最新のレコードの前に常に 1 つ作成され、最新のレコードはスキップされます。
トリガーのイベントをAFTER INSERTに変更してみましたが、問題は解決しませんでした。
プログラムによって処理される最初の 2 つのテーブルにレコードが作成されますが、私には制御できないため、この問題を解決する回避策を探しています。
ここで何が欠けているのでしょうか?
@Akina のおかげで、この問題は解決しました。
私のコードは問題ありませんが、論理エラーが発生しました。hm_deliverylog (最初のテーブル) でプロシージャを呼び出すトリガーを作成しています。私がすべきことは、hm_deliverylog_recipients (2 番目のテーブル) でトリガーを作成することです。アプリケーションが main を最初に挿入するためです。最初のテーブルにデータを挿入し、次に 2 番目のテーブルに受信者のデータを挿入します。そのため、最初のテーブルにトリガーを設定すると、トリガーが実行されますが、2 番目のテーブルがチェックされますが、2 番目のテーブルにはまだレコードがありません。 3 番目のテーブルにレコード テーブルは作成されません。
2 番目のテーブルにトリガーを作成すると、正常に動作します。
@Akina さん、リマインドしてくれてありがとう