答えは次のとおりです。まあ、それは状況によって異なります。
myisamの場合、myisamシーケンスはリクエストを挿入するため、答えは確かに「はい」です。
ただし、innodbの場合、mysqlv5.1以降の動作は構成可能です。 v5.1より前では、InnoDBの回答もyesです。その後は、innodb_autoinc_lock_mode
に依存します。 設定。詳細については、InnoDBauto_increment構成に関するmysqlのドキュメントを参照してください。
。
ハイライトを提供するために、3つのinnodb_autoinc_lock_mode
があります 設定:
- 従来の(0)
- 結果(1)-デフォルト
- インターリーブ(2)
トランザクションがロールバックされている場合、auto_increment値にさらにギャップが生じる可能性があります。バルクインサートは、全体としてのみロールバックできます。
更新: 上記のように、シナリオ1)または2)を取得します 、使用する場合
- myisamテーブルエンジン
- またはinnodbpremysql v5.1
- またはmysqlv5.1以降のinnodbと
innodb_autoinc_lock_mode
0または1です
どちらが最初に挿入されたかを判断する方法はありません。
シナリオ3)または4)が表示される場合があります 使用する場合
- innodb with
innodb_autoinc_lock_mode
2
繰り返しになりますが、mysqlがレコードの順序を混同する方法と理由を判断する方法はありません。
したがって、質問が一括挿入で3つのレコードを挿入し、last_insert_id()が最初に挿入されたレコードのauto_increment値のみを返すという事実に関連していて、単純な追加によって他の2つのレコードのIDを取得したい場合は使用するテーブルエンジンとmysqlのバージョンに基づいてmysqlの構成を確認する必要がある場合があります。