MySQL alter ignore構文の詳細な説明

MySQL alter ignore構文の詳細な説明

今日仕事中に、ビジネス側から次のような質問をされました。テーブルがあり、一意のフィールドを追加する必要がありますが、現在このフィールドには重複した値がいくつかあります。良い解決策はありますか?

正直に言うと、この質問を初めて聞いたとき、私はどうすればよいか分かりませんでした。なぜなら、そのような要件に遭遇したことがなかったからです。繰り返しフィールドに一意性を設定する場合、フィールドは一意にできず、値が繰り返されるため、必然的にデータが失われます。そこで私は彼に詳細にニーズを尋ね、最終的にこのプロセスでは重複データを 1 つだけ保存する必要があり、ある程度のデータ損失は許容できることを知りました。重複フィールドはたまたま時間フィールドです。この場合、各時点でレコードが存在することを確認するだけで済みます。

これを聞いて、私は次のような方法を思いつきました。

1. テーブル データをバックアップし、distinct メソッドを使用してこのフィールドをフィルター処理してから、結合クエリを使用して他のフィールドを取得します。

2. テーブル データをバックアップし、クエリ テーブルを使用して重複値のある部分を記録し、統計を実行して、レコードの 1 つをランダムに保持します。

これら 2 つの方法に加えて、MySQL の下位バージョンでは、alter ignore table メソッドを使用する別の方法があります。この構文はほとんど使用されません。これをテストするために実験を行いました。

[email protected]:yeyztest 23:30:51>>テーブル test\G の作成を表示
************************** 1. 行 ****************************
    表: テスト
テーブルの作成: CREATE TABLE `test` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `age` int(11) デフォルト NULL,
 `score` int(11) NOT NULL,
 主キー (`id`)
) エンジン=InnoDB AUTO_INCREMENT=12 デフォルト文字セット=utf8
セット内の 1 行 (0.00 秒)

[email protected]:test 23:38:39>>test から * を選択します。
+----+------+-------+
| ID | 年齢 | スコア |
+----+------+-------+
| 1 | 2 | 3 |
| 2 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 4 | 5 |
+----+------+-------+
セット内の 4 行 (0.00 秒)

テーブルを作成し、重複レコードを挿入して、年齢フィールドに一意のインデックスを追加します。結果を見てみましょう。

[email protected]:test 23:38:43>>テーブルテストを変更し、一意のキー uni_key(age) を追加します。
エラー 1062 (23000): キー 'uni_key' のエントリ '2' が重複しています

[email protected]:test 23:39:04>>テーブルテストを無視して変更し、一意のキー uni_key(age) を追加します。
エラー 1062 (23000): キー 'uni_key' のエントリ '2' が重複しています


[email protected]:test 23:39:24>>@@old_alter_table=1 を選択します。
+---------------------+
| @@old_alter_table=1 |
+---------------------+
| 0 |
+---------------------+
セット内の 1 行 (0.00 秒)


[email protected]:test 23:40:22>>old_alter_table=1 を設定します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

[email protected]:test 23:40:36>>テーブルテストを無視して変更し、一意のキー uni_key(age) を追加します。
クエリは正常、4 行が影響を受けました (0.04 秒)
記録: 4 重複: 1 警告: 0

[email protected]:test 23:40:39>>test から * を選択します。
+----+------+-------+
| ID | 年齢 | スコア |
+----+------+-------+
| 1 | 2 | 3 |
| 3 | 3 | 4 |
| 4 | 4 | 5 |
+----+------+-------+
セット内の 3 行 (0.00 秒)

ご覧のとおり、最初に従来の直接変更方法を使用しました。つまり、alter table テスト メソッドが使用されました。競合するレコードが見つかった場合は、alter ignore メソッドを使用する必要があります。それでもエラーは残りました。クエリを実行した後、パラメータ old_alter_table が欠落していることがわかりました。重複レコードを正常に削除して一意のインデックスを追加するには、このパラメータを 1 に設定する必要があります。最終的に、結果が正常に達成されました。

ここで注意すべき点は、このテストの環境は MySQL5.5.19 であるということです。MySQL5.7 環境ではこのテストは失敗し、この構文は不正な構文としてマークされます。したがって、このメソッドは MySQL バージョン 5.5 でのみ使用できます。興味のある学生は、バージョン 5.6 で使用できるかどうかをテストできます。

もう 1 つ説明させてください。alter ignore table の本質は、新しいテーブルを作成することです。新しいテーブル構造の age フィールドは一意になります。次に、insert ignore 構文を使用してそれを挿入します。重複レコードが見つかった場合は、直接削除されます。したがって、この構文を使用する場合は、テーブル内のデータの量に注意してください。データ量が多い場合は、実行時間が非常に長くなる可能性があるため、注意して使用する必要があります。

今日はこれで終わりです。

上記は、MySQL alter ignore 構文の詳細な説明です。MySQL alter ignore 構文の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • Mysql データベース ストアド プロシージャの基本構文の説明
  • 複数のフィールドを変更するためのMysql更新の構文の詳細な分析
  • MySQL 5.7 に組み込まれているストレス テストの mysqlslap コマンドと構文の詳細な説明
  • MySQLの構文、特殊記号、正規表現の詳細な説明
  • MySQL 5.7.9 シャットダウン構文例の詳細な説明
  • MySQLデータベースの基本構文と操作

<<:  Docker を使用した war パッケージ プロジェクトのデプロイの実装

>>:  要素テーブルテーブルコンポーネントの複数フィールド(複数列)ソート方法

推薦する

JavaScriptの動作メカニズムの詳細な説明とイベントループについての簡単な説明

目次1. JavaScript がシングルスレッドなのはなぜですか? 2. タスクキュー3. イベン...

MySQL ジョイントインデックス(複合インデックス)の実装

共同インデックスこの記事におけるジョイントインデックスの定義は次のとおりです (MySQL): AL...

MySQL 外部キー制約とテーブル関係の概要

目次外部キーテーブルの関係を決定する方法テーブル関係を作成する方法1対多の関係 - 従業員テーブルと...

.htaccess を使用して特定の IP からの Web サイトへのアクセスを禁止する方法

序文コストを考慮して、ほとんどのウェブマスターは、多数の小規模なウェブサイト用にサーバーを個別に購入...

Navicat を MySQL に接続するときに発生する 2059 エラーの解決方法

最近、Djangoを学習しているときにデータベースを使用する必要があったため、MySQLで使用するた...

要素ツリーコントロールは、ドロップダウンメニューとアイコンを統合します(ツリー+ドロップダウン+入力)

目次要件:実装手順:この記事では主に以下について説明します: カスタムツリーコントロール<el...

HTML でスクロールバーを使用する際のヒントを共有する

今日、牛南ニュースリリースシステムについて学んでいたとき、牛南先生はスクロールバーに関するいくつかの...

Linuxの相対パスと絶対パスの使用

01. 概要絶対パスと相対パスはシェル環境でよく使用され、それぞれに独自の用途があります。相対パスの...

ウェブレッスンプラン、初心者向けレッスンプラン

指導トピックウェブページ適用グレード高校2年生授業時間1 クラス教科書分析焦点: 静的および動的ウェ...

有名なウェブサイトのロゴに使われている25種類のフォントのコレクション

この記事では、25 の有名な Web サイト (Google、Yahoo、Twitter、Digg ...

Zabbix 監視ソリューション - 最新の公式バージョン 4.4 [推奨]

ザビックス2019/10/12 チェンシン参照するhttps://www.zabbix.com/do...

Linuxでホスト名を永続的に変更する方法

ホスト名を変更する場合は、以下の手順に従ってください。ホスト名の使用hostnameコマンドを使用す...

node.js チュートリアルの Util モジュールの例の詳細な説明

目次タイプ判定から始める厳格な平等エラーファーストと約束デバッグと出力タイプ判定から始めるJavaS...

CSS3 と JavaScript を使用して Web カラー ピッカーのサンプル コードを開発する

この例の Web カラー ピッカー機能は、ページ効果を実現するために CSS3 を使用します。つまり...

Docker クリーニングの一般的な方法と問題点

大規模な開発に Docker を使用する場合でも、クリーンアップ戦略がなければ、ディスクがすぐにいっ...