MySQLは重複データを処理する学習ノート
MySQL処理重複データ
いくつかのMySQLデータテーブルには重複した記録があるかもしれません。一部の場合、重複したデータの存在を許可しますが、時々私たちはこれらの重複したデータを削除する必要があります。
この章では、データテーブルの重複データの発生を防ぐ方法と、データテーブルの重複データの削除方法を紹介します。
防止表に重複データが表示されます。
MySQLデータテーブルに指定されたフィールドをPRIMARY KEYまたはUNIQUE(一意)インデックスとして設定して、データの一意性を保証できます。
次の表には索引とキーがないので、この表は複数の重複記録を可能にします。
INSERT IGNORE INTOとINSERT INTOの違いは、INSERT IGNOREはデータベースに既に存在するデータを無視します。データベースにデータがない場合は、新しいデータを挿入します。データがあればスキップします。このようにして、データベースに既にデータが存在しています。ギャップにデータを挿入する目的に達することができます。
以下の例では、INSERT IGNORE INTOを使用していますが、実行後はエラーが発生せず、データテーブルに重複データを挿入することもありません。
もう一つの設定データの一意の方法は、以下のように、UNIQUEインデックスを追加することである。
以下は統計表の中のfirst_を参照してください。nameとlast_nameの重複記録数:は、どの列に含まれる値が重複するかを判定する。 列選択リストでCOUNT(*)の列を使用します。 GROUTP BYサブルーチンに列記された列。 HAVING子文の設定の重複数は1より大きいです。 重複データをフィルタ
重複していないデータを読み込む必要がある場合は、SELECT文でDISTINCTキーワードを使って重複データをフィルタリングすることができます。
データテーブルの重複データを削除したいなら、以下のSQL文を使ってもいいです。
いくつかの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ではprimryやuniqueと同じ記録があれば削除します。新しいレコードを挿入します。もう一つの設定データの一意の方法は、以下のように、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(u)に戻ります。tblテーブルで重複した記録数。通常、重複した値を照会します。以下の操作を実行してください。重複していないデータを読み込む必要がある場合は、SELECT文でDISTINCTキーワードを使って重複データをフィルタリングすることができます。
mysql> SELECT DISTINCT last_name, first_name
-> FROM person_tbl;
GROUTP 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;
もちろん、データテーブルにインデックスとPRIMAY KEYという簡単な方法を追加してテーブルの重複記録を削除してもいいです。方法は以下の通りです
mysql> ALTER IGNORE TABLE person_tbl
-> ADD PRIMARY KEY (last_name, first_name);
以上がMySQLの重複データ処理の学習ノートの詳細です。MySQLの重複データ処理に関する資料は他の関連記事に注目してください。