MySQLの自動増分主キーIDはこのように処理されません

MySQLの自動増分主キーIDはこのように処理されません

MySQLの自動増分主キーIDは段階的に増加しません

1. はじめに

MySQL データベースにデータを追加し、ON DUPLICATE KEY UPDATE を使用してデータを更新すると、ID が段階的に増加するのではなく、断続的に増加する場合があります。

たとえば、ID が 10 の場合、次に追加されるときには 15 または別の数字になる可能性があります。2 つの数字の間隔は、ON DUPLICATE KEY UPDATE が実行される回数です。つまり、ON DUPLICATE KEY UPDATE は、更新を実行するときにテーブルの主キーを 1 つ増やします。

図に示すように

2. 問題の紹介

同じテーブルを追加および変更するときに、2 つのマッパー インターフェイス メソッドを使用しました。つまり、2 つの ON DUPLICATE KEY UPDATE 操作を使用しました。これにより、更新時にテーブルの主キーが増加します。次回挿入時には段階的に増加しません。

3. 解決策

データベースの挿入と更新を分割します。

自動増分主キーの利点と欠点

主キーの自動増分

この方法では、データベースによって提供される自動インクリメント数値フィールドを自動インクリメント主キーとして使用します。その利点は次のとおりです。

(1)データベースは自動的に番号が付けられ、高速かつ段階的に増加し、順序良く保存されるため、検索に非常に便利です。

(2)デジタルタイプは場所を取らず、整理しやすく、プログラムに渡すのに便利です。

(3)システム以外でレコードを追加する場合は、このフィールドを指定する必要はなく、主キーの重複を気にする必要もありません。

実際、その欠点はその利点から生じており、その欠点は次のとおりです。

(1)自動増加のため、指定したIDのレコードを手動で挿入するのは面倒です。特に他システムと統合してデータのインポートが必要な場合、元のシステムのIDが主キーと競合しないことを保証するのは困難です(旧システムもデジタルであると仮定)。特に、新しいシステムが起動され、古いシステムと新しいシステムが並行して存在し、データベースが異種であり双方向の同期が必要な場合、自動増分主キーは悪夢になります。

(2)システム統合またはカットオーバー時に、新旧システムの主キーが異なり、数値である場合、主キーのデータ型が変更され、外部キーに関連付けられた他のテーブルも変更され、同様に深刻な結果を招くことになります。

(3)システムもデジタル化されている場合、インポート時に新旧のデータを区別するために、古いデータの主キーの前に文字識別子(「o」、oldなど)を追加して、古いデータであることを示す必要がある場合があります。この場合、自動的に増加するデジタルタイプは別の課題に直面します。

上記は私の個人的な経験です。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL の主キーとその自動増分の設定に関するチュートリアル
  • MySQL で自動増分主キーの型を int から char に変更する例
  • MySQL の自動増分 ID (主キー) が不足した場合の解決策
  • MySQL の自動増分主キーが使い果たされた場合の対処方法
  • MySQL 8 の新機能: 自動増分主キーの永続性に関する詳細な説明
  • MySQL の非主キー自己増分使用例の分析
  • MySQLの自動増分主キーの実装の詳細な説明
  • MySQL の自動インクリメント主キーが連続していないのはなぜですか?

<<:  CSSのoutline-offsetプロパティを使用してプラス記号を実装する

>>:  docker compose デプロイメントにおけるマスタースレーブレプリケーションの実装

推薦する

CSSで記事の区切り線のスタイルを実装するさまざまな方法のまとめ

この記事では、CSS で記事の区切り線を実装するさまざまな方法をまとめています。区切り線はページを美...

MySQL を解凍してインストールおよび完全に削除する方法の詳細なグラフィック説明

1. MySQLをインストールする(1)ダウンロードしたMySQLの圧縮ファイルをMySQLをインス...

Dockerがコンテナを作成した後にホスト名を変更する詳細なプロセス

後悔を癒す薬は世の中にある、考えてみる気さえあれば!コンテナを再作成する必要はもうありません。 m2...

MySQL のロックの仕組みと使用法の分析

この記事では、例を使用して MySQL のロック メカニズムと使用方法を説明します。ご参考までに、詳...

Vue での this.$set の動的データバインディングのケーススタディ

インターネット上の this.$set の説明はわかりにくいと感じます。単一データ、オブジェクト、配...

EXPLAIN コマンドの詳細な説明と MySQL での使用方法

1. シナリオの説明: 同僚から MySQL で explain を使用する方法を教わったので、返さ...

Vueはvueメタ情報を使用して各ページのタイトルとメタ情報を設定します。

title: vue は vue-meta-info を使用して各ページのタイトルとメタ情報を設定...

HTML から PDF への変換事例の概要 (複数の画像を推奨)

仕事の都合上、最近 HTML を PDF に変換する機能について調べることに時間を費やしました。 H...

Jsonフォーマットの詳細な説明

目次JSON は次の 2 つの構造に基づいて構築されます。 2. JSON形式1. オブジェクト2....

入力タグの名前と値の違い

type はブラウザでの入力と出力に使用されるコントロールです (たとえば、type="t...

Kylin V10 への zabbix-agent のインストール手順

1. インストールパッケージをダウンロードするダウンロードアドレス: https://sourcef...

WebデザイナーがRetinaディスプレイデバイス向けの画像を作成する方法

特記事項:この記事は、Chris Spooner の英語記事「Web デザイン用の Retina グ...

Linux での MySQL 5.7.16 無料インストール バージョンのグラフィック チュートリアル

この記事では、参考までにMySQL 5.7.16の無料インストール版のチュートリアルを紹介します。具...

Dockerプライベートウェアハウスの構築とインターフェース管理の詳細な説明

1. レジストリについて公式 Docker ハブは、パブリックイメージを管理するのに適した場所です。...

CSS3を使用してヘッダーアニメーション効果を作成する

Netease Kanyouxi公式サイト(http://kanyouxi.163.com/)(棚...