2013-08-12 8 views
8

私はMySQLを使用しています。 新しいレコードを入力せずにAUTO_INCREMENT列が取る次の値を取得したいとします。 Oracleで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になります。しかし、実際の値3が必要です。これは、auto_incrementカラムはとにかくなります。このような

+0

でもありません。私は価値を受け取りたい。しかし、これらの答えは説明を印刷します。検索可能な値ではありません –

+0

http://www.microshell.com/database/mysql/emulating-nextval-function-to-get-sequence-in-mysql/ – Mihai

+0

このコードを使用してください: 'SELECT(IFNULL(max(id)、 0)+ 1)をテーブルから取得する。 テーブルにレコードがない場合はIFNULLが役に立ちます。 –

答えて

8

照会テーブルのステータス:今すぐ

SHOW TABLE STATUS WHERE `Name` = 'table_name' 

は結果にあなたはAuto_incrementという名前の列を取得します。これはあなたが求めていた価値です。 JAVAで

:ここ

conn = DriverManager.getConnection(connectionUrl, connectionUser, connectionPassword); 
stmt = conn.createStatement(); 
rs = stmt.executeQuery("SHOW TABLE STATUS WHERE `Name` = 'table_name'"); 
rs.next(); 
String nextid = rs.getString("Auto_increment"); 

全例:http://www.avajava.com/tutorials/lessons/how-do-i-use-jdbc-to-query-a-mysql-database.html

+0

はい、出力しています。表示された状態からその値を取得するにはどうすればよいですか? (SHOW TABLE STATUS WHERE 'Name' = 'table_name')からauto_incrementを選択しても動作しません。 –

+0

どんな言語ですか? JDBCを使用している –

+0

java。 ResultSetの結果として値だけを受け取りたい。 –

0

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

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

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

+0

私は別のテーブルに挿入クエリを実行し、それが有効であるかどうかを確認してから、このテーブルに挿入します。 –

+0

これを行う最善の方法はトランザクションです。MyISAMを使用している場合は、行の挿入が失敗した場合は、行を挿入し、autoincrementの値を取得します。 – Vatev

1

私が正しく理解していれば、あなたは指標として行数を使用できます。

SELECT TABLE_ROWS+1 
FROM information_schema.tables 
WHERE table_name='tableName' 
AND table_schema = DATABASE(); 
関連する問題