特定のイベントでデータベースがINSERT
で更新されるアプリケーションが2つのテーブルA
とB
にあります。外部キーがid_A
、id_B
〜A
、B
の多対多の関係をマッピングする追加の関連付け/リンクテーブルAB
があります。私の質問は、AB
が外部キーの1つがアプリケーションロジック(この場合はAUTO_INCREMENT
IDなので)に知られていないときに最もよく更新する方法です。自動増分外部キーを持つMySQL関連テーブルを自動的に更新します。
その他の詳細:
- はのみ
id_B
はAUTO_INCREMENT
に設定されているので、その値を挿入する前に知られていません。 B
は複数行のINSERT
で更新されます。A
は単一行INSERT
です。id_B
は一意のキーですが、古い値を新しいものに置き換えるON DUPLICATE KEY UPDATE
によって処理される可能性のある重複があります。A
およびは、同じイベントに対して同じトランザクションで更新されます。- InnoDBを使用するMySQL 5.7。私の考えは
AB
への最終INSERT
がLAST_INSERT_ID()
からid_B
の値を取得するだろうが、どうやらこれが唯一のマルチ行の最初の行の値を返すストアドプロシージャ内のすべてのINSERT文を含めることでした
挿入:https://dev.mysql.com/doc/refman/5.7/en/information-functions.html#function_last-insert-id
AB
を更新するロジックを、親テーブルを更新するために使用されているものとは別のトリガーまたは別のステートメントに分けることができます。
編集:コメントへの応答。文の前
Aの各レコードとBの各レコードは、常にABに少なくとも1つのレコードを持ちますか? – toonice
明確にするために、3つのテーブルA、B、A_Bがあります。 –
ところで、1つのSQL INSERT文を使用しない限り、2つのテーブルを同時に挿入することはできません。 1つは常に他のものの前に発生します。 –