3

これは MySQL での ID 生成の正しい方法ですか?

INSERT INTO Picture (PictureId,First_pick,Title,Description,File_Name,Is_Vertical)VALUES
((SELECT max(pictureid)+1 FROM Picture),0,?,?,?,?)

このクエリが多くのスレッドで実行されたときに PictureId が一意であることが保証されている場合はどうなりますか?

テーブル構造を変更できません。特定のロック、インデックス、またはトランザクション分離レベルを使用する必要がありますか?

よろしく、ミハル

4

3 に答える 3

3

あなたは通常AUTO_INCREMENT、これらのことを処理するフィールドを使用します:手動

それにもかかわらず、質問は良いです.これについてmySQLの専門家から深い答えを聞きたいです. 説明されている方法でそれを行うと、どれほど信頼できるでしょうか?

于 2010-03-08T10:17:18.060 に答える
2

テーブルを適切にロックしない限り (他のスレッドがテーブルにアクセスできなくなることで問題が発生する可能性があります)、複数のスレッドが同時にレコードを挿入しようとすると、提案されたアプローチは競合状態の影響を受けやすくなります。

于 2010-03-08T10:29:20.960 に答える
0

本当に AUTO_INCREMENT を使用できない場合は、書き込みのためにテーブルを確実にロックする必要があります。

于 2010-03-08T10:22:40.003 に答える