MySQLは、重複データを扱います
我々は、重複データを許すが、時には我々は、重複データを削除する必要がある場合には、重複するレコードいくつかのMySQLデータテーブルがあるかもしれません。
この章では、我々は、データテーブルのデータの重複を防ぐために、どのようにデータテーブル内の重複データを削除する方法を紹介します。
表示されたテーブル内の重複データを防ぎます
あなたは、データの一意性を保証するために、PRIMARY KEY(主キー)またはUNIQUE(ユニーク)インデックスのMySQLデータテーブル内の指定されたフィールドを設定することができます。テーブルの下の索引と主キーなしで、表が複数重複したレコードが表示されることができるように:の例を試してみましょう。
CREATE TABLE person_tbl ( first_name CHAR(20), last_name CHAR(20), sex CHAR(10) );
あなたは、テーブルのフィールドのfirst_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 INTO違いIGNOREは、INSERT INTO INSERT IGNOREをして、データベースにデータを持っていない場合は、既に、データベースに存在するデータを無視データがある場合、新しいデータを挿入し、このデータをスキップすることです。 すでに隙間に挿入されたデータの目的を達成するために、データベースに存在するデータを保持することができるようになっています。
次の例では、INSERT INTOはをIGNORE使用して実装した後に間違って行くことができない、それは、データテーブルに重複挿入しません。
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)
データを挿入すると、レコードの一意性を設定した後、あなたが重複したデータを挿入する場合、エラーを返しませんINTOをIGNORE INSERT、それが唯一の警告として返します。 プライマリまたはユニークな存在は、最初に削除した場合、同じレコードにINTOをREPLACE。 次に、新しいレコードを挿入します。
データの別のセットは、唯一の方法は、以下のように、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句にリストされている列。
- 句を有する繰り返し数が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);