MySQL SQL質問応答スレ [無断転載禁止]©2ch.net (148レス)
前次1-
抽出解除 レス栞

76
(1): 2022/06/07(火)07:52 ID:uPHVsKsW(1) AAS
レコード追加する際に、連番のカラムを最大値+1にしたいです。

諸事情で、
・その連番のカラムはAUTO_INCREMENTではない
・プライマリキーでもなければUNIQUEですらない
・テーブル定義は変更してはいけない
という状況で、
重複させないのが要件です。

INSERT INTO unko (renban) SELECT MAX(renban)+1 FROM unko;
として1つのSQLで実行すれば、重複のリスクは回避できるでしょうか?

それとも、トランザクションでテーブル排他ロックからしなきゃだめでしょうか?
78: 2022/06/07(火)18:02 ID:??? AAS
>>76
トランザクションによる排他制御は必須
それが暗黙的に実行されるか明示的に指定するかの違いがあるだけ
そのケースは分離レベルをserializableにする必要がある

同じSQLステートメントでしか競合しないなら
片方のトランザクションをコミット直前でsleepさせておいて
もう片方のトランザクションをsleepさせずに実行した結果を確認してみるといい
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.522s*