MySQLクエリは重複データをどのように処理しますか?重複するデータ ステートメントを削除するフィルター
MySQL 重複データの処理
一部の MySQL データ テーブルに重複レコードが存在する可能性があります。重複データの存在を許可する場合もありますが、これらの重複データを削除する必要がある場合もあります。
この章では、データ テーブルの重複データを防止する方法と、データ テーブルの重複データを削除する方法を紹介します。
テーブル内のデータの重複を防ぐ
MySQL データ テーブルの指定されたフィールドを次のように設定できます。 主キー または UNIQUE(ユニーク) データの一意性を確保するためのインデックス。
例を試してみましょう。以下のテーブルにはインデックスと主キーがないため、テーブルは複数の重複レコードを許可します。
CREATE TABLE person_tbl ( first_name CHAR(20), last_name CHAR(20), sex CHAR(10) );
テーブル内のフィールド first_name と last_name を設定する場合、データを繰り返すことはできません。二重主キー モードを設定して、データの一意性を設定できます。二重主キーを設定すると、そのキーのデフォルト値NULL にすることはできませんが、NOT NULL に設定することはできます。次のように:
CREATE TABLE person_tbl ( first_name CHAR(20) NOT NULL, last_name CHAR(20) NOT NULL, sex CHAR(10), PRIMARY KEY (last_name, first_name) );
一意のインデックスを設定すると、重複データを挿入すると、SQL ステートメントが正常に実行されず、エラーがスローされます。
INSERT IGNORE INTO と INSERT INTO の違いは、INSERT IGNORE はデータベースに既に存在するデータを無視することです. データベースにデータがない場合は新しいデータを挿入し、データがある場合はこのデータをスキップします.このようにして、データベース内の既存のデータを保存することができ、ギャップにデータを挿入するという目的を達成することができます。
次の例では、INSERT IGNORE INTO を使用しています。これはエラーなしで実行され、データ テーブルに重複データを挿入しません。
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name) -> VALUES( 'Jay', 'Thomas'); Query OK, 1 row affected (0.00 sec) mysql> INSERT IGNORE INTO person_tbl (last_name, first_name) -> VALUES( 'Jay', 'Thomas'); Query OK, 0 rows affected (0.00 sec)
INSERT IGNORE INTO データの挿入時に、レコードの一意性を設定した後、重複データが挿入された場合、エラーは返されず、警告のみが返されます。また、プライマリまたは一意のレコードがある場合は、最初に削除します。新しいレコードを挿入します。
データの一意性を設定する別の方法は、次のように UNIQUE インデックスを追加することです。
CREATE TABLE person_tbl ( first_name CHAR(20) NOT NULL, last_name CHAR(20) NOT NULL, sex CHAR(10) UNIQUE (last_name, first_name) );
統計重複データ
以下では、テーブル内の first_name と last_name の重複レコードの数を数えます。
mysql> SELECT COUNT(*) as repetitions, last_name, first_name -> FROM person_tbl -> GROUP BY last_name, first_name -> HAVING repetitions > 1;
上記のクエリ ステートメントは、person_tbl テーブル内の重複レコードの数を返します。一般に、重複する値を照会するには、次の手順を実行します。
- 重複する可能性のある値が含まれている列を特定します。
- それらの列をリストするには、列選択リストで COUNT(*) を使用します。
- GROUP BY 句にリストされている列。
- HAVING 句は、1 より大きい繰り返し回数を設定します。
重複データのフィルタリング
一意のデータを読み取る必要がある場合は、SELECT ステートメントで DISTINCT キーワードを使用して重複データをフィルター処理できます。
mysql> SELECT DISTINCT last_name, first_name -> FROM person_tbl;
GROUP BY を使用して、テーブルから一意のデータを読み取ることもできます。
mysql> SELECT last_name, first_name -> FROM person_tbl -> GROUP BY (last_name, first_name);
データの重複排除
データ テーブル内の重複データを削除する場合は、次の SQL ステートメントを使用できます。
mysql> CREATE TABLE tmp SELECT last_name, first_name, sex -> FROM person_tbl; -> GROUP BY (last_name, first_name, sex); mysql> DROP TABLE person_tbl; mysql> ALTER TABLE tmp RENAME TO person_tbl;
もちろん、データテーブルにINDEX(インデックス)とPRIMAY KEY(主キー)を追加して、テーブル内の重複レコードを削除することもできます。以下の方法:
mysql> ALTER IGNORE TABLE person_tbl -> ADD PRIMARY KEY (last_name, first_name);
Hope Chen Weiliang ブログ ( https://www.chenweiliang.com/ ) 共有 "MySQL はどのようにクエリを実行し、重複データを処理しますか?Filtering and Deduplication Statements」が役に立ちます。
この記事のリンクを共有することを歓迎します。https://www.chenweiliang.com/cwl-499.html
Chen WeiliangのブログのTelegramチャンネルへようこそ。最新のアップデートを入手できます!
📚 このガイドには非常に価値のある内容が含まれています。🌟これはめったにない機会です、お見逃しなく! ⏰⌛💨
気に入ったらシェア&いいね!
あなたの共有といいねは、私たちの継続的な動機です!