2012-04-23 32 views
3

私は、自動増分フィールドを持つmysqlテーブルを持っています。私はデータベース全体でIDジェネレータとして自動増分カウンタを使用しています。mysql自動インクリメントなしインクリメント

カウンタをインクリメントする方法が必要ですが、データを挿入せずに新しい数値を取得する必要があります。

これは簡単ですか?

+1

「インクルードジェネレータ」として自動インクリメントカウンタを使用しているとはどういう意味ですか? – Daan

+0

@ Daan私は他のテーブルのプライマリキーとしてそのテーブルのIDを使用します – applechief

+0

あなたが共有に気をつけなければ、まさにあなたのユースケースは何ですか?私はあなたが自動インクリメントカウンタとロールバックを使用せずにやりたいことは何でも良い方法がないと想像することはできません:) – Daan

答えて

2

IDジ​​ェネレータとして使用している場合は、(テーブルを変更する以外にも)次の値を取得するために何かを挿入する必要があります。

データを挿入しないでこれを行う最も簡単な方法は、INSERTを実行した後、LAST_INSERT_IDを呼び出してからROLLBACKを発行することです。これは挿入をロールバックしますが、次のIDは増分されます。

+0

実際には、私が間違っていないと、 'blackhole'エンジンを使うのが最も簡単です:) –

+1

ROLLBACKは、ストレージエンジンがInnoDBの場合にのみ可能です.LAST_INSERT_IDの後にDELETE FROMを発行できると思います。これはもっと一般的な方法です。 – rkosegi

+0

@ N.B。 - それはそうですが、ブラックホールエンジンはauto_increment値の状態を維持しないので、ブラックホールテーブルに置くことはできますが、無価値です。 –

0

使用このクエリ、テーブルの状態

SHOW TABLE STATUS LIKE 'table_name' 

はあなたが値

$result = mysql_query("SHOW TABLE STATUS LIKE 'table_name'"); 
$row = mysql_fetch_assoc($result); 
$nextAutoIncrement = $row['Auto_increment']; 
+0

しかし、これは実際にテーブルをインクリメントしないで、私は人為的にインクリメントしたものと同じIDを取得するレコードを挿入します。いいえ? – applechief

-1

を抽出するためにPHPを使用した

をしたい値を持つフィールドAuto_incrementがあります取得するには私はあなたがこれを使用できるようにテーブルを変更したいと思います

ALTER TABLE table_name AUTO_INCREMENT = id+1 

ここのIDは自動インクリメントフィールドになります。 自動増分フィールドは、その列の最大値に対して増分されます。

+1

注:mysqlではalter tableを* transactionalではありません。既存のトランザクションは、テーブルを変更することによってコミットされます。これは、これを行うのが推奨される方法ではないためです。 – Ian