Mariadb-managing-duplicates

提供:Dev Guides
移動先:案内検索

MariaDB-重複の管理

MariaDBは、以前のレッスンで説明したように、状況によってはレコードとテーブルの重複を許可します。 これらの重複の一部は、個別のデータまたはオブジェクトタイプのため、または操作オブジェクトの一意の寿命またはストレージの結果として、実際には重複ではありません。 これらの複製も通常は問題ありません。

状況によっては、重複が問題を引き起こし、暗黙のアクションまたはMariaDBコマンドの緩やかなポリシーが原因で表示されることがよくあります。 この問題を制御し、重複を見つけ、重複を削除し、重複の作成を防ぐ方法があります。

戦略とツール

重複を管理する4つの重要な方法があります-

  • JOINで魚を捕まえ、一時テーブルでそれらを削除します。
  • INSERT …​ ON DUPLICATE KEY UPDATEを使用して、重複の検出時に更新します。
  • DISTINCTを使用して、SELECTステートメントの結果を整理し、重複を削除します。
  • INSERT IGNOREを使用して、重複の挿入を停止します。

一時テーブルでの結合の使用

内部結合のような半結合を実行し、一時テーブルで見つかった重複を削除します。

INSERTを使用する

INSERT …​ ON DUPLICATE KEY UPDATEが重複する一意キーまたは主キーを検出すると、更新を実行します。 複数の一意のキーが検出されると、最初のキーのみが更新されます。 したがって、複数の一意のインデックスを持つテーブルでは使用しないでください。

次の例を確認します。これは、入力されたフィールドへの挿入時にインデックス値を含むテーブルで何が起こるかを明らかにします-

INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

注意-キーが見つからない場合、INSERT …​ ON DUPLICATE KEY UPDATEステートメントは通常の挿入ステートメントと同様に実行されます。

DISTINCTを使用する

DISTINCT句は、結果から重複を削除します。 DISTINCT句の一般的な構文は次のとおりです-

SELECT DISTINCT fields
FROM table
[WHERE conditions];

-DISTINCT句を含むステートメントの結果-

  • 1つの式を使用すると、一意の値が返されます。
  • 複数の式を使用すると、一意の組み合わせが返されます。
  • NULL値は無視されません。したがって、結果には一意の値としてNULLも含まれます。

単一の式のDISTINCT句を使用して、次のステートメントを確認します-

SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';

複数の式を使用して次の例を確認します-

SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30

INSERT IGNOREの使用

INSERT IGNOREステートメントは、重複レコードの検出時に挿入をキャンセルするようMariaDBに指示します。 以下に指定されたその使用例を確認します-

mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
   VALUES( 'Lex', 'Luther');

また、重複の背後にあるロジックに注意してください。 一部のテーブルでは、そのテーブルデータの性質に基づいて複製が必要です。 重複レコードを管理するための戦略にそのニーズに対応します。