一意のインデックスによる重複の削除
重複レコードを含む大きなテーブルがあり、一意のインデックスを作成して重複を削除する場合は、潜在的な結果に注意する必要があります。
既に重複を含むテーブルに一意のインデックスを追加しようとすると、重複キー エラーにより操作は失敗します。これは、一意のインデックスによって、含まれるデータの一意性が強制されるためです。
ただし、この問題には回避策があります。一意のインデックスを作成するときに IGNORE 修飾子を使用できます。これにより、重複する値を無視し、一意の値のみを挿入するように MySQL に指示されます。
<code class="sql">ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D) IGNORE;</code>
IGNORE 修飾子を使用すると重複は削除されますが、どの行を保持するかは指定されないことに注意することが重要です。 。 MySQL は重複ごとに 1 つの行を任意に選択し、残りは破棄します。
MySQL バージョン 5.7.4 以降を使用している場合は、ALTER TABLE の IGNORE 修飾子が削除されているため、エラーが発生します。この場合、次の回避策を使用できます:
<code class="sql">CREATE TABLE tmp_data SELECT * FROM mytable; TRUNCATE TABLE mytable; ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D); INSERT IGNORE INTO mytable SELECT * from tmp_data; DROP TABLE tmp_data;</code>
INSERT IGNORE を使用すると、重複する値は無視され、一意の値のみが挿入されます。データが挿入されたら、一時テーブルを削除できます。
以上がMySQL で一意のインデックスを使用してテーブルから重複を削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。