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

失敗した挿入でMySQLの自動インクリメントが増加するのはなぜですか?

    InnoDB トランザクションエンジンです。

    これは、次のシナリオでは次のことを意味します。

    1. Session A レコード1を挿入します
    2. Session B レコード2を挿入します
    3. Session A ロールバック

    、ギャップまたはSession Bの可能性があります Session Aまでロックされます コミットまたはロールバック。

    InnoDB 設計者(他のほとんどのトランザクションエンジン設計者と同様)は、ギャップを許容することを選択しました。

    ドキュメント>

    自動インクリメントカウンターにアクセスする場合、InnoDB 特別なテーブルレベルのAUTO-INCを使用します 現在のSQLの最後まで保持するロック トランザクションの終わりではなく、ステートメント。 AUTO_INCREMENTを含むテーブルへの挿入の同時実行性を向上させるために、特別なロック解放戦略が導入されました。 列

    InnoDB サーバーが実行されている限り、メモリ内の自動インクリメントカウンターを使用します。サーバーを停止して再起動すると、InnoDB 最初のINSERTの各テーブルのカウンターを再初期化します 前に説明したように、テーブルに。

    idが怖い場合 列を折り返す、BIGINTにします (8バイト長)。



    1. ストアドプロシージャを使用する利点と欠点

    2. PostgreSQLインストールのバイナリ形式で書き込み可能なmongo_fdw拡張機能をコンパイルします。

    3. PostgreSQLとMySQL

    4. SQL Server BCPは破損したファイルをエクスポートしますか?