ホームページ >データベース >mysql チュートリアル >ON DUPLICATE KEY UPDATE で MySQL の自動インクリメントが誤動作するのはなぜですか?

ON DUPLICATE KEY UPDATE で MySQL の自動インクリメントが誤動作するのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-30 17:32:12510ブラウズ

Why Does MySQL's Auto-Increment Misbehave with ON DUPLICATE KEY UPDATE?

ON DUPLICATE KEY 自動インクリメントの異常

MySQL で、テーブルにデータを挿入するときに ON DUPLICATE KEY UPDATE を使用すると、予期しない動作が発生する可能性があります自動インクリメント列を使用します。質問で説明されているように、最初の挿入時に自動インクリメント値が期待どおりにインクリメントされることが観察されますが、ON DUPLICATE KEY 条件がトリガーされて新しい行が挿入されると、自動インクリメント値が不規則に表示されます。

この問題に対する答えは、MySQL が ON DUPLICATE KEY UPDATE を処理する方法にあります。 MySQL のドキュメントに記載されているように、この操作中に、MySQL は新しい行を挿入するのではなく、既存の行の更新を実行します。自動インクリメント列の場合、INSERT ステートメントは、更新が適用される前に自動インクリメント値をインクリメントします。ただし、UPDATE ステートメントは値をインクリメントしません。

簡単に説明すると、

  • INSERT は、自動インクリメント値をインクリメントして新しい行を挿入しようとします。
  • ON DUPLICATE KEY 条件が検出され、更新がトリガーされます。
  • 更新セット自動インクリメント列を含む既存の行の値を、update 句で指定された値に置き換えます。

その結果、更新された行の自動インクリメント列は、予期した値を反映しません。新しい行が挿入された場合に割り当てられる値。自動インクリメント列に依存してギャップをなくすことは推奨されないことに注意してください。厳密な連続番号付けが重要な場合は、出力でトリガーまたは計算値を使用してカスタム ロジックを実装し、目的の増分動作を維持することをお勧めします。

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

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