sql >> データベース >  >> RDS >> Mysql

MySQLテーブルに複数の行を挿入すると、IDは毎回1ずつ増加しますか?

    答えは次のとおりです。まあ、それは状況によって異なります。

    myisamの場合、myisamシーケンスはリクエストを挿入するため、答えは確かに「はい」です。

    ただし、innodbの場合、mysqlv5.1以降の動作は構成可能です。 v5.1より前では、InnoDBの回答もyesです。その後は、innodb_autoinc_lock_modeに依存します。 設定。詳細については、InnoDBauto_increment構成に関するmysqlのドキュメントを参照してください。

    ハイライトを提供するために、3つのinnodb_autoinc_lock_modeがあります 設定:

    1. 従来の(0)
    2. 結果(1)-デフォルト
    3. インターリーブ(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の構成を確認する必要がある場合があります。



    1. テーブルから最初のデータのみをクエリします

    2. ユーザーに表示するのではなく、codeigniterクエリエラーを確認します

    3. MySQLは特定の値で列をカウントします

    4. JDBCを使用したMySQL一般クエリログの有効化