0

誰かが作成したこのスクリプトを持っていて、それを調べたところ、安全かどうかわからないものが見つかりました。

トランザクション内では、2 つの異なるテーブルに 2 つの連続した挿入があり、どちらも自動インクリメントされた主キーを持ちます。それらは同じであると想定されています (最初の挿入から生成された主キー = 2 番目の挿入から生成された主キー)。

理由は聞かないでください。それは、スクリプトがどのように作成されたかにすぎません。

私はトランザクションに不慣れで、ここに同時実行の問題があるかどうかはわかりません。別のスレッドが同時に実行され、最終的に次のようなキーが生成される可能性について考えています。

Thread #1:    Table_A ID: 3                                        Table_B ID: 4
Thread #2:                      Table_A ID: 4     Table_B ID: 3

トランザクションがこれを防げないことは確かです (今日初めてトランザクション関連のドキュメントしか用意できませんでした)。

ありがとう!

4

2 に答える 2

0

あなたのシナリオは間違いなく可能です。

主キーが両方のテーブルで同じであると想定される場合はAUTO_INCREMENT、2 番目のテーブルの をオーバーライドして、値を明示的に挿入できます。

INSERT
INTO    a (id)
VALUES  (NULL) -- this inserts an auto incremented value

INSERT
INTO    b (id)
SELECT  LAST_INSERT_ID() -- this inserts the last value inserted into a in this session
于 2013-04-16T16:05:38.467 に答える