私は、自動増分フィールドを持つmysqlテーブルを持っています。私はデータベース全体でIDジェネレータとして自動増分カウンタを使用しています。mysql自動インクリメントなしインクリメント
カウンタをインクリメントする方法が必要ですが、データを挿入せずに新しい数値を取得する必要があります。
これは簡単ですか?
私は、自動増分フィールドを持つmysqlテーブルを持っています。私はデータベース全体でIDジェネレータとして自動増分カウンタを使用しています。mysql自動インクリメントなしインクリメント
カウンタをインクリメントする方法が必要ですが、データを挿入せずに新しい数値を取得する必要があります。
これは簡単ですか?
IDジェネレータとして使用している場合は、(テーブルを変更する以外にも)次の値を取得するために何かを挿入する必要があります。
データを挿入しないでこれを行う最も簡単な方法は、INSERT
を実行した後、LAST_INSERT_ID
を呼び出してからROLLBACK
を発行することです。これは挿入をロールバックしますが、次のIDは増分されます。
実際には、私が間違っていないと、 'blackhole'エンジンを使うのが最も簡単です:) –
ROLLBACKは、ストレージエンジンがInnoDBの場合にのみ可能です.LAST_INSERT_IDの後にDELETE FROMを発行できると思います。これはもっと一般的な方法です。 – rkosegi
@ N.B。 - それはそうですが、ブラックホールエンジンはauto_increment値の状態を維持しないので、ブラックホールテーブルに置くことはできますが、無価値です。 –
使用このクエリ、テーブルの状態
SHOW TABLE STATUS LIKE 'table_name'
はあなたが値
$result = mysql_query("SHOW TABLE STATUS LIKE 'table_name'");
$row = mysql_fetch_assoc($result);
$nextAutoIncrement = $row['Auto_increment'];
しかし、これは実際にテーブルをインクリメントしないで、私は人為的にインクリメントしたものと同じIDを取得するレコードを挿入します。いいえ? – applechief
を抽出するためにPHPを使用した
をしたい値を持つフィールドAuto_increment
があります取得するには私はあなたがこれを使用できるようにテーブルを変更したいと思います
ALTER TABLE table_name AUTO_INCREMENT = id+1
ここのIDは自動インクリメントフィールドになります。 自動増分フィールドは、その列の最大値に対して増分されます。
注:mysqlではalter tableを* transactionalではありません。既存のトランザクションは、テーブルを変更することによってコミットされます。これは、これを行うのが推奨される方法ではないためです。 – Ian
「インクルードジェネレータ」として自動インクリメントカウンタを使用しているとはどういう意味ですか? – Daan
@ Daan私は他のテーブルのプライマリキーとしてそのテーブルのIDを使用します – applechief
あなたが共有に気をつけなければ、まさにあなたのユースケースは何ですか?私はあなたが自動インクリメントカウンタとロールバックを使用せずにやりたいことは何でも良い方法がないと想像することはできません:) – Daan