MySQL は重複データを処理します
MySQL は重複データを処理します
一部の MySQL データ テーブルには重複レコードの存在が許可される場合がありますが、場合によってはこれらの重複データを削除する必要もあります。
この章では、データテーブルに重複データが表示されないようにする方法と、データテーブル内の重複データを削除する方法を紹介します。
テーブル内のデータの重複を防ぐ
MySQL データテーブルの指定されたフィールドを PRIMARY KEY (主キー) または UNIQUE (一意の) index に設定して、データの一意性を確保できます。例を試してみましょう: 次のテーブルにはインデックスと主キーがないため、テーブルでは複数の重複レコードが許可されます。
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 データを挿入するときは、レコードの一意性を設定した後、重複がある場合は、データが挿入された場合、エラーは返されず、警告のみが返されます。 同じプライマリまたは一意のレコードへの REPLACE 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 -> ORDER BY last_name;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); 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);
おすすめの関連ビデオチュートリアル: