ホームページ  >  記事  >  データベース  >  [mysql チュートリアル] MySQL は重複データを処理します

[mysql チュートリアル] MySQL は重複データを処理します

黄舟
黄舟オリジナル
2016-12-26 17:26:441275ブラウズ

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) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。