0

サイトでこのクエリを使用して次の自動インクリメントを取得していますが、問題は、2 つ以上の接続がこのクエリを同時に実行でき、両方の接続が同じ AUto-Increment 値を持つことです。

SHOW TABLE STATUS LIKE 'TABLE_ORDERS';

2 つ以上の接続がこのクエリを同時に実行するのを止める方法はありますか?

どうもありがとう!!

Edit

この自動インクリメントの値は、レコードを別のテーブル「領収書」に保存するために使用されます。また、2 つの接続が Orders テーブルから同じ Auto-increment 値を取得すると、Receipt テーブルに同じ値を持つ 2 つの行ができてしまいます。

4

2 に答える 2

1

それをストアドプロシージャに入れて追加できます

SELECT SLEEP(2);

初期化。

これは、以前のクエリを一時停止する必要がある場合、たとえばスレーブがマスターに再接続している場合に役立ちます。

MySQLスリープ

于 2012-10-16T15:37:08.813 に答える
1

自動インクリメント値を直接使用しないでください。これは、説明している種類の競合状態に必ずつながるためです。

代わりに、レコードを挿入LAST_INSERT_ID()して、行に発行された識別子を確認する必要があります。この値は、他のテーブルに安全に転置できます。

幸いLAST_INSERT_ID()なことに、値は接続ごとに最後の行に挿入された ID を表すため、そこで競合状態が発生するリスクはありません。

于 2012-10-16T16:26:51.027 に答える