ホームページ > データベース > mysql チュートリアル > MySQL の AUTO_INCREMENT が INSERT ... ON DUPLICATE KEY UPDATE と矛盾する動作をするのはなぜですか?

MySQL の AUTO_INCREMENT が INSERT ... ON DUPLICATE KEY UPDATE と矛盾する動作をするのはなぜですか?

Linda Hamilton
リリース: 2024-12-05 16:51:10
オリジナル
656 人が閲覧しました

Why Does MySQL's AUTO_INCREMENT Behave Inconsistently with INSERT ... ON DUPLICATE KEY UPDATE?

MySQL の ON DUPLICATE KEY AUTO INCREMENT の問題

問題:

INSERT ... ON DUPLICATE KEY を使用する場合自動インクリメント列 (id) を含むテーブルを含む UPDATE ステートメントでは、id 値は次のように表示されます。重複キーが見つかった場合、奇数に増加します。最初の挿入中 (重複キーなし)、ID は通常どおり増加します。ただし、ON DUPLICATE KEY 句がトリガーされ、新しい行が挿入されると、ID 値が不整合になります。

回答:

この動作は意図的なものであり、MySQL によって文書化されています。 。一意のインデックスまたは主キーに重複値を引き起こすローが挿入されると、MySQL は新しいローを挿入する代わりに古いローの更新を実行します。これは、INSERT ステートメントが最初に試行されても、その段階で ID 値がすでにインクリメントされていることを意味します。

自動インクリメント列は UPDATE ステートメントによって更新されないため、その後の更新では ID 値はインクリメントされません。 。代わりに、元の (更新された) 行の ID 値が保持されます。

解決策:

ギャップのない自動インクリメントを維持するには、別の行を使用する必要があります。アプローチ。 1 つのオプションは、自動インクリメント列に依存するのではなく、出力で増分値を計算することです。あるいは、テーブルのロックとトリガーを含むより複雑なアプローチを使用して、行の番号を付け直し、ID 値にギャップがないようにすることもできます。

以上がMySQL の AUTO_INCREMENT が INSERT ... ON DUPLICATE KEY UPDATE と矛盾する動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート