MySQL 最新のマニュアル ...login
MySQL 最新のマニュアル チュートリアル
著者:php.cn  更新時間:2022-04-15 14:04:12

MySQL は重複データを処理します


MySQL は重複データを処理します

一部の MySQL データ テーブルには重複レコードの存在が許可される場合がありますが、場合によってはこれらの重複データを削除する必要もあります。

この章では、データテーブルに重複データが表示されないようにする方法と、データテーブル内の重複データを削除する方法を紹介します。

テーブル内のデータの重複を防ぐ

MySQL データテーブルの指定されたフィールドを PRIMARY KEY (主キー) または UNIQUE (一意の) index に設定して、データの一意性を確保できます。

例を試してみましょう: 次のテーブルにはインデックスと主キーがないため、テーブルでは複数の重複レコードが許可されます。

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 の重複レコードの数をカウントします。 :

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 句にリストされる列。

  • HAVING 句は、繰り返しの数を 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);

おすすめの関連ビデオチュートリアル:

PHP中国語ウェブサイト