以下の質問はすべて InnoDB ストレージ エンジンに基づいています。 1. 最も大きな ID を持つレコードが削除された後、新しく挿入されたレコードの ID は何ですか? たとえば、現在のテーブルに ID 1、2、3 の 3 つのレコードがあり、3 が削除された場合、新しく挿入されたレコードの ID はどこから始まるのでしょうか。 答え: 4 から始めます。 実験 自動増分IDを持つテーブルtb0を作成します。 テーブル tb0(id int unsigned auto_increment primary key) を作成します。 3 つのレコードを挿入します: tb0 に値 (null) を挿入します。 ID 3 のレコードを削除します。 tb0 から id=3 を削除 現在の自動増分値を表示します。 テーブル tb0 の作成を表示します。 # 結果CREATE TABLE `tb0` ( `id` int(10) 符号なし NOT NULL AUTO_INCREMENT, 主キー (`id`) ) エンジン=InnoDB AUTO_INCREMENT=4 デフォルト文字セット=latin1 自動インクリメント ID は 4 であり、最大の ID を持つレコードを削除しても、自動インクリメント ID の値には影響しません。 2. MySQL の再起動後、自動増分 ID はどこから始まりますか? たとえば、現在のテーブルに ID 1、2、3 の 3 つのレコードがある場合、3 を削除して MySQL を再起動すると、新しく挿入されたレコードの ID はどこから始まるでしょうか? 4 から始まると思っている人が多いですが、実際は 3 から始まります。 InnoDB の自動インクリメント値はデータ ファイルではなくメモリに記録されるためです。 再起動後は、現在の最大 ID + 1 が開始値として使用されます。 実験 自動増分IDを持つテーブルtb1を作成します。 テーブル tb1(id int unsigned auto_increment 主キー) を作成します。 3 つのデータ レコードを追加します。 tb1 に値 (null) を挿入します。 ID 3 のレコードを削除します。 tb1 から id=3 を削除 前の質問から、この時点で自動インクリメント ID 値は 4 であることがわかります。 MySQLを再起動します。 現在の自動増分値を表示します。 テーブル tb1 を作成します。 # 結果CREATE TABLE `tb1` ( `id` int(10) 符号なし NOT NULL AUTO_INCREMENT, 主キー (`id`) ) エンジン=InnoDB AUTO_INCREMENT=3 デフォルト文字セット=latin1 3. ID を手動で挿入した後、次に挿入するときに自動的に増加する値は何ですか? たとえば、現在の自動インクリメント ID が 4 で、新しいレコードを挿入するときに手動で ID を 10 に指定した場合、次に自動インクリメント方式を使用して挿入すると、ID は 11 になります。 ID自動増分 = 現在の最大ID + 1 新しいレコードを挿入すると、新しいID値が計算されます 実験 自動増分 ID を持つテーブル tb2 を作成します。 テーブル tb2(id int unsigned auto_increment 主キー) を作成します。 レコードを追加します: tb2 に値 (null) を挿入します。 IDを手動で指定します: tb2 に値 (4294967000) を挿入します。 現在の自動増分値を表示します。 テーブル tb2 の作成を表示します。 # 結果CREATE TABLE `tb2` ( `id` int(10) 符号なし NOT NULL AUTO_INCREMENT, 主キー (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4294967001 デフォルト文字セット=latin1 自動増分値が 4294967001 になることがわかります。 4. 自己付加価値を使い果たした後はどうするか unsigned int の最大値は 4294967295 です。自動インクリメントがこの値に達すると、値は変更されず、新しいレコードが挿入されるとエラーが報告されます。
テーブル レコードの挿入と削除が頻繁に行われる場合、テーブル内のレコードの総数が多くなくても ID がすぐに使い果たされる可能性があります。この場合は、bigint が必要になることがあります。 int値の範囲:
bigint値の範囲:
まとめ 実験を通じて、InnoDB の自己増分 ID のいくつかの特性がわかります。 新しいレコードを挿入すると、自動 ID が使用されているか、ID が手動で指定されているかに関係なく、新しい自動増分値 (最大 ID + 1) が計算されます。 最大 ID 値を削除しても自動増分 ID 値には影響しませんが、MySQL の再起動後には影響があります。以前の自動増分 ID 値は使用されず、最大 ID+1 が使用されます。これは、自動増分 ID 値がメモリに保存されており、再起動後に再計算する必要があるためです。 自動増分 ID は、使い切った後は変更されません。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
目次質問解決質問この問題には多くの理由があるようです。私の問題は、パラメータ付きのURLを更新できな...
目次1. プロジェクトの説明1.1 背景1.2 実装設計1.2.1 従来の方法1.2.2 最適化され...
序文一般的なビジネス シナリオでは、検索ボックスへの入力が完了した後、検索データを取得するために関連...
目次1. 外部キー制約外部キーとは何ですか?外部キーを使用する条件:外部キーの定義構文は次のとおりで...
目次序文1. batがjsを実行する2. ターミナルにバージョン番号を入力してパッケージ化コマンドを...
序文ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。 1. オブジェクトスト...
背景インデックスは諸刃の剣です。クエリ速度は向上しますが、DML 操作も遅くなります。結局のところ、...
トリガーの紹介トリガーは、テーブルに関連付けられた特別なストアド プロシージャであり、テーブル内のデ...
質問LINUX では、定期的なタスクは通常、cron デーモン プロセス [ps -ef | gre...
目次1. はじめに2. 本文2.1 単一列のソート2.2 複数の列を並べ替える2.3 ソート方法2....
目次SVG による画像キャプチャCSS部分エフェクト画像表示ソースコードアドレスこれまで見てきたもの...
最近、Zabbix データベースを MySQL 5.6 から 5.7 にアップグレードしたときに、マ...
目次序文1.nullでない2. ユニーク3. デフォルト4.主キー自動増分主キー5. 外部キー6.チ...
1. my.iniファイルを手動で作成して追加する # クライアントセクション # --------...
目次8. CSS3 クリックボタンの円形進捗チェック効果8.1 画像プレビュー8.2 index.h...