8

私はMySQLを使用しています。新しいレコードを入力せずに、AUTO_INCREMENT 列が取る次の値を取得したいと考えています。

create table ABC(id int(10) NOT NULL AUTO_INCREMENT,name char(10));

オラクルでは使用していたはずsequencename.nextval();ですが、MySQL では何を使用すればよいでしょうか?

使わなかった理由はこちら

select max(id) from ABC;

id=2 のエントリがあるとします。これで、列 id は次の値を 3 とします。id=3 のレコードを作成する前に、id=2 のレコードを削除すると。私が言及したクエリの答えは 2 になります。しかし、auto_increment 列がとにかく取る実際の値 3 が必要です。

4

3 に答える 3

0

行を挿入する前に取得する値を保証する方法はありません。これは主に、テーブル全体をロックして、他のスレッドが「あなたの」次の値で挿入を行わないようにする必要があるためです。

トランザクションを開始し、行を挿入し、値を取得してからロールバックを実行することで、値を予約できます。その後、その値を安全に使用できます。

行を挿入する方がずっと簡単なので、あなたがやっていることの目的を理解していないかもしれません。

于 2013-08-12T11:25:08.497 に答える