MySQLは重複データを処理する学習ノート


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では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テーブルで重複した記録数。通常、重複した値を照会します。以下の操作を実行してください。
  • は、どの列に含まれる値が重複するかを判定する。
  • 列選択リストでCOUNT(*)の列を使用します。
  • GROUTP BYサブルーチンに列記された列。
  • HAVING子文の設定の重複数は1より大きいです。
  • 重複データをフィルタ
    重複していないデータを読み込む必要がある場合は、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の重複データ処理に関する資料は他の関連記事に注目してください。