自動インクリメントではニーズが十分でない場合は、 nを使用してアトミックシーケンスメカニズムを作成できます。 このような名前付きシーケンス:
シーケンスを保存するテーブルを作成します:
CREATE TABLE sequence (
seq_name varchar(20) unique not null,
seq_current unsigned int not null
);
テーブルに「foo」の行があるとすると、次のような次のシーケンスIDをアトミックに取得できます。
UPDATE sequence SET seq_current = (@next := seq_current + 1) WHERE seq_name = 'foo';
SELECT @next;
ロックは必要ありません。両方のステートメントを同じセッションで実行する必要があるため、選択が発生したときにローカル変数@nextが実際に定義されます。