ホームページ  >  に質問  >  本文

MySQL プロシージャは最新のレコードをスキップします

次の 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 つのテーブルにレコードが作成されますが、私には制御できないため、この問題を解決する回避策を探しています。

ここで何が欠けているのでしょうか?

P粉550323338P粉550323338181日前374

全員に返信(1)返信します

  • P粉294954447

    P粉2949544472024-04-04 16:33:24

    @Akina のおかげで、この問題は解決しました。

    私のコードは問題ありませんが、論理エラーが発生しました。hm_deliverylog (最初のテーブル) でプロシージャを呼び出すトリガーを作成しています。私がすべきことは、hm_deliverylog_recipients (2 番目のテーブル) でトリガーを作成することです。アプリケーションが main を最初に挿入するためです。最初のテーブルにデータを挿入し、次に 2 番目のテーブルに受信者のデータを挿入します。そのため、最初のテーブルにトリガーを設定すると、トリガーが実行されますが、2 番目のテーブルがチェックされますが、2 番目のテーブルにはまだレコードがありません。 3 番目のテーブルにレコード テーブルは作成されません。

    2 番目のテーブルにトリガーを作成すると、正常に動作します。

    @Akina さん、リマインドしてくれてありがとう

    返事
    0
  • キャンセル返事