MySQL は重複データを処理します
一部の MySQL データ テーブルには重複レコードが存在する場合がありますが、場合によっては、これらの重複データを削除する必要もあります。
この章では、データテーブルに重複データが表示されないようにする方法と、データテーブル内の重複データを削除する方法を紹介します。
テーブル内のデータの重複を防ぐ
MySQL データ テーブル内の指定したフィールドを PRIMARY KEY (主キー) または 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 データを挿入するときは、レコードの一意性を設定した後、重複がある場合は、データが挿入された場合、エラーは返されず、警告のみが返されます。 同じプライマリまたは一意のレコードへの 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 の重複レコードの数をカウントします。上記のクエリ ステートメントは、person_tbl テーブル内の重複レコードの数を返します。 一般に、重複する値をクエリするには、次の手順を実行します:
どの列に重複する可能性のある値が含まれているかを判断します。
それらの列をリストするには、列選択リストで COUNT(*) を使用します。
GROUP BY 句にリストされる列。
HAVING 句は、繰り返しの数を 1 より大きく設定します。
重複データをフィルタリングする
一意のデータを読み取る必要がある場合は、SELECT ステートメントで DISTINCT キーワードを使用して重複データをフィルタリングできます。
mysql> SELECT COUNT(*) as repetitions, last_name, first_name -> FROM person_tbl -> GROUP BY last_name, first_name -> HAVING repetitions > 1;
GROUP BY を使用して、データ テーブル内の重複しないデータを読み取ることもできます:
mysql> SELECT DISTINCT last_name, first_name -> FROM person_tbl -> ORDER BY last_name;
重複データを削除します
データ テーブル内の重複データを削除する場合は、次の SQL ステートメントを使用できます:
mysql> SELECT last_name, first_name -> FROM person_tbl -> GROUP BY (last_name, first_name);
もちろん、簡単な方法で INDEX (インデックス) と PRIMAY KEY (主キー) をデータテーブルに追加して、テーブル内の重複レコードを削除することもできます。方法は次のとおりです:
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;
上記は、[mysql チュートリアル] MySQL の重複データの処理の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。