2017-08-11 12 views
0

私は、InnoDBと自動増分フィールドを主キーとして使用するテーブルを持つデータベースを持っています。 auto_incrementを使用しているフィールドの最高値が常に最新であるという事実に頼ることができるかどうか疑問に思っています。Mysql:自動インクリメントの最大値は常に最新のものですか?

私はこの時点で明確なenaughを見つけられませんでした。

+1

行がNO、削除することができますので。 'auto_increment'が連続カウンタであっても、いくつかのエントリが削除される可能性があり、現在の' auto_increment'の値よりも低い値を見つけるかもしれません。たとえば、10個のレコードを挿入すると、 'auto_increment'は10になります。誰かがその列のレコードを削除するために削除クエリを実行した場合、最大クエリは1より大きくなります。次回の挿入クエリでは、 'auto_increment'の値は2ではなく11になります。あなたの質問に関連している場合は、' LAST_INSERT_ID() 'に関する提案された回答を見てください。 –

+0

私の質問はおそらく混乱していたか、またはあなたが説明しようとしているものを正確に得られなかったかもしれません。実際には、私の質問は「選択された」記述に関するものです。ですから、私は 'auto_increment'フィールドの最高値を選択すると、私はいつも最も整流された項目を持っているのでしょうか? – user3292788

+0

いいえ、削除要因のため、 'LAST_INSERT_ID()'はINSERTクエリの直後にのみ相対的です。 –

答えて

0

必ずしもそうではありません。値を挿入して削除する場合、最大値は最新の値ではありません。

何かを挿入した後にLAST_INSERT_ID()を使用することをおすすめします。

LAST_INSERT_ID()の場合、最も最近生成されたIDは、接続ごとにサーバー に保持されます。別の クライアントによって変更されることはありません。別のAUTO_INCREMENT 列を非マジック値(NULLでない値、つまり が0でない値)で更新すると、変更されません。

Source

+0

答えをありがとうが、私はそれがselectステートメントのために指定するのを忘れていた。 – user3292788

+0

ええ、問題ありません、あなたもSELECTでそれを使用することができます。 'SELECT * FROM table_name WHERE id = LAST_INSERT_ID() 'のように – Ayushya

+0

これは、すべてのINSERT文、つまりSELECT文だけを意味します。代わりにMAXを使用します。 – user3292788

関連する問題