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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-05 16:51:10657ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。