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

mysqlが一部の自動インクリメントIDをスキップするのはなぜですか?

    これは、InnoDBでの自動インクリメントロックの例です。同じセッションで2つのステートメントを同時に実行している場合、自動インクロックは最初のクエリによって取得され、自動インクリメント値の生成はステートメント間でインターリーブされません。つまり、要点です。トランザクションの。

    これは常に設計によって発生します。そうでない場合、InnoDBのトランザクションが機能する方法は機能しません。 OLTPタイプのロードでのスケーラビリティは、すべての挿入が他のすべての挿入が終了するか、コミットされるか、さらに悪いことにロールバックされるまで待機する必要があるため、ひどいものになります。

    つまり、最初の挿入が2番目の挿入より5倍長く実行され、失敗してロールバックされた場合でも、2番目の挿入は完了してコミットされています。そうでなければ、あなたはeaを待たなければならないでしょう。次々に完了するクエリ。

    シーケンシャルで完全に一意のID番号が必要な場合は、別のソースからプルしてください。 AutoInc列は、シリアル化のポイントでありボトルネックである一意の値(必ずしもモノシーケンスである必要はありません)を保証するだけです。

    特に必要な場合は、これを回避する1つの方法:

    innodb_autoinc_lock_mode = 0を設定します my.cnf / mysql.ini

    説明InnoDBとオプションでの自動インクロックの機能



    1. SQLServerで使用できるさまざまな種類の制約-SQLServer/T-SQLチュートリアルパート50

    2. TNS-12505:TNS:listenerは現在、接続記述子で指定されたSIDを認識していません

    3. MYSQLデータベースからファイルをダウンロードする

    4. MySQLで重複する値を見つける