重複データの処理に関するMySQL学習ノート

重複データの処理に関するMySQL学習ノート

MySQLは重複データを処理します

一部の MySQL テーブルには重複レコードが含まれている場合があります。重複データが存在することを許容する場合もありますが、重複データを削除する必要がある場合もあります。

この章では、データ テーブルに重複データが表示されないようにする方法と、データ テーブル内の重複データを削除する方法を紹介します。

テーブルに重複データが表示されないようにする

データの一意性を確保するために、MySQL テーブル内の指定されたフィールドを PRIMARY KEY または UNIQUE インデックスとして設定できます。

例を試してみましょう: 次のテーブルにはインデックスや主キーがないため、テーブル内に複数の重複レコードが許可されます。

テーブル person_tbl を作成する
(
  ファーストネーム CHAR(20)
  姓 CHAR(20)、
  性別 CHAR(10)
);

テーブル内の first_name フィールドと last_name フィールドのデータが重複しないように設定する場合は、二重主キー モードを設定してデータの一意性を設定できます。二重主キーを設定すると、そのキーのデフォルト値は NULL にできず、NOT NULL に設定できます。以下のように表示されます。

テーブル person_tbl を作成する
(
  first_name CHAR(20) NOT NULL、
  last_name CHAR(20) NOT NULL、
  性別 CHAR(10)
  主キー (姓、名)
);

一意のインデックスを設定すると、重複データを挿入するときに SQL ステートメントが正常に実行されず、エラーがスローされます。

INSERT IGNORE INTO と INSERT INTO の違いは、INSERT IGNORE ではデータベースにすでに存在するデータが無視されることです。データベースにデータがない場合、新しいデータが挿入されます。データがある場合、そのデータはスキップされます。このようにして、データベース内の既存のデータを保持し、ギャップにデータを挿入するという目的を達成することができます。

次の例では、INSERT IGNORE INTO を使用しています。実行後にエラーは発生せず、データ テーブルに重複データは挿入されません。

mysql> person_tbl (姓、名) に IGNORE を挿入します
  -> VALUES('ジェイ', 'トーマス');
クエリは正常、1 行が影響を受けました (0.00 秒)
mysql> person_tbl (姓、名) に IGNORE を挿入します
  -> VALUES('ジェイ', 'トーマス');
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

INSERT IGNORE INTO データを挿入する際、レコードの一意性を設定した後、重複したデータが挿入された場合、エラーは返されず、警告のみが返されます。 REPLACE INTO に同じプライマリまたは一意のレコードがある場合は、まずそれが削除されます。新しいレコードを再度挿入します。

データの一意性を設定する別の方法は、次に示すように、UNIQUE インデックスを追加することです。

テーブル person_tbl を作成する
(
  first_name CHAR(20) NOT NULL、
  last_name CHAR(20) NOT NULL、
  性別 CHAR(10)
  ユニーク (姓、名)
);

重複データのカウント

以下では、テーブル内の first_name と last_name の重複レコードの数をカウントします。

mysql> 繰り返しとして COUNT(*) を選択、姓、名
  -> person_tbl から
  -> GROUP BY 姓、名
  -> 繰り返し回数が 1 回を超える;

上記のクエリは、person_tbl テーブル内の重複レコードの数を返します。 一般に、重複する値を照会するには、次の手順を実行します。

  • 繰り返される可能性のある値が含まれる列を決定します。
  • 列選択リストで COUNT(*) を使用して、それらの列を一覧表示します。
  • GROUP BY 句にリストされている列。
  • HAVING 句は繰り返し回数を 1 より大きく設定します。

重複データのフィルタリング

重複しないデータを読み取る必要がある場合は、SELECT ステートメントで DISTINCT キーワードを使用して重複データを除外できます。

mysql> SELECT DISTINCT 姓、名
  -> person_tbl から;

GROUP BY を使用してテーブル内の一意のデータを読み取ることもできます。

mysql> 姓、名を選択
  -> person_tbl から
  -> GROUP BY (姓、名);

重複排除

テーブル内の重複データを削除する場合は、次の SQL ステートメントを使用できます。

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex FROM person_tbl GROUP BY (last_name, first_name, sex);
mysql> テーブル person_tbl を削除します。
mysql> ALTER TABLE tmp の名前を person_tbl に変更します。

もちろん、データ テーブルに INDEX (インデックス) と PRIMAY KEY (主キー) を追加して、テーブル内の重複レコードを削除することもできます。方法は次のとおりです。

mysql>テーブル person_tbl を無視する変更
  -> 主キーを追加します (last_name, first_name);

以上がMySQLの重複データの処理に関する勉強ノートの詳しい内容です。MySQLの重複データの処理についての詳細は、123WORDPRESS.COMのその他の関連記事にも注目してください!

以下もご興味があるかもしれません:
  • 重複したMySQLレコードを現場でチェックし、処理する実践的な記録
  • MySQL の重複データの処理方法 (防止と削除)
  • MySQLデータの同時更新を処理する方法
  • MySQLの実行原理、論理階層化、データベース処理エンジンの変更について詳しく説明します
  • MySQLが大量のデータを処理する際にクエリ速度を最適化するいくつかの方法
  • MySQLデータ処理のソートと追加、削除、変更の操作の説明

<<:  Docker.v19 で Docker Compose オーケストレーション ツールをインストールして構成する方法

>>:  js に基づいて大きなファイルのアップロードとブレークポイントの再開を管理する方法

推薦する

MySQL スロークエリ: スロークエリを有効にする

1. スロークエリの用途は何ですか? long_query_time を超えて実行されるすべての S...

CSS で垂直方向の中央揃えを実装するいくつかの方法の概要

フロントエンドのレイアウト プロセスでは、水平方向の中央揃えを実現するのは比較的簡単で、通常は ma...

JavaScript タイマー原理の詳細な説明

目次1. setTimeout() タイマー2. setTimeout() タイマーを停止する3. ...

MySQL のインデックスにおける NULL の影響についての詳細な説明

序文私は多くのブログを読み、弊社の DBA を含む多くの人々が、MySql では列に null が含...

React における useEffect と useLayoutEffect の違い

目次前提条件使用効果コミット前ミューテーション効果コミットミューテーション効果コミットレイアウト効果...

MySQL 5.6 ルートパスワード変更チュートリアル

1. MySQL 5.6をインストールした後、正常に有効化できないMySQL の圧縮バージョンは、解...

Vue プロジェクトで axios をカプセル化する方法 (http リクエストの統合管理)

1. 要件Vue.js フレームワークを使用してフロントエンド プロジェクトを開発する場合、サーバ...

よく使われるn番目の子セレクターをまとめる

序文フロントエンドプログラミングでは、奇数、偶数などの数値を受け入れることができる nth-chil...

Docker で PostgreSQL を実行し、いくつかの接続ツールを推奨する

1 はじめに PostgreSQL は、非常に充実した機能を備えたフリーソフトウェアのオブジェクトリ...

Vueコンポーネント間の通信の非常に詳細な要約

目次序文1. Props、$emit一方向データフロー2. $親、$子3. $attrs、$list...

さまざまなターミナルで Mac が SSH 経由でリモート サーバーに接続する方法の説明

Macはシェル(ターミナル)SSHを使用してリモートサーバーに接続します前提条件: 接続する必要があ...

MySQL のストアド プロシージャを使用して 100 万件のレコードをすばやく生成する方法

序文テストを行う際、大量のデータによる負荷に耐えるプロジェクトの能力をテストするために、通常はテスト...

MySQL 1対多関連クエリのページングエラー問題の解決方法

XML価格照会のクエリデータにはリストが含まれているため、コレクションが必要です <結果マップ...

Linux コマンドライン操作 Baidu クラウドのファイルのアップロードとダウンロード

目次0. 背景1. インストール2. Baidu Cloudアカウントにログインする3. ファイルを...

ローカル Docker に Postgres 12 + pgadmin をインストールする方法 (Apple M1 をサポート)

目次導入Intel CPUをサポートApple M1のサポートテスト導入このプロジェクトでは最近、P...