3

MySQL と MyISAM エンジンを使用してテーブルから最大値を選択し、新しいレコードを挿入するとします。この最大値 + 1この値に基づいて (変換を適用した後)。同じ最大値を読み取り、同じ新しいレコードを挿入しようとする他のトランザクションが同時に発生することは望ましくありません。

これを防ぐにはどうすればよいですか?

テーブル全体をロックする必要がありますか?


AUTO_INCREMENT明確にするために言うと、実行する操作を「プラス 1」よりもかなり複雑なものに再定義できない限り、ここでは使用できないと確信しています。

4

2 に答える 2

3
LOCK TABLES `tbl` WRITE;
INSERT INTO `tbl` (`id`, `foo`) SELECT MAX(`id`)+1, 'bar' FROM `tbl`;
UNLOCK TABLES;

ただしAUTO_INCREMENT、標準の主キー/ID タイプ フィールドの場合は使用する必要があります。

于 2012-09-14T21:23:07.617 に答える
1

データベースに作業を任せるので、これについて心配する必要はありません。既に組み込まれているauto_increment機能を使用します。

于 2012-09-14T21:21:54.957 に答える