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'
Note −キーが見つからない場合、INSERT ... ON DUPLICATE KEYUPDATEステートメントは通常の挿入ステートメントと同じように実行されます。
DISTINCTの使用
DISTINCT句は、結果から重複を削除します。DISTINCT句の一般的な構文は次のとおりです。
SELECT DISTINCT fields
FROM table
[WHERE conditions];
Note − 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
INSERTIGNOREの使用
INSERT IGNOREステートメントは、重複レコードの検出時に挿入をキャンセルするようにMariaDBに指示します。以下に示すその使用例を確認してください-
mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
VALUES( 'Lex', 'Luther');
また、重複の背後にあるロジックにも注意してください。一部のテーブルでは、そのテーブルデータの性質に基づいて複製が必要です。重複レコードを管理するための戦略でそのニーズに対応します。