あなたの質問: "一意のインデックスを使用したmysqlクエリでこれを実現できますか? "
答えは100%はいです。
インデックスを作成するには、次の2つの方法があります。
1. CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);
2. ALTER TABLE table_name
ADD UNIQUE index_name (column1, column2, ...);
ただし、これは、テーブルに既存の重複データがない場合にのみ機能します。そうしないと、次のようなエラーメッセージが表示されます。
Query: CREATE UNIQUE INDEX index_name ON targets (a, b)
Error Code: 1062
Duplicate entry 'photo-url1' for key 'index_name'
したがって、次のことを行う必要があります。
targets
に似た新しい空のテーブルを作成します テーブル。- 一意のインデックスを作成します。
-
INSERT IGNORE
古いテーブルのデータ。 targets
の名前を変更しますtargets_old
へ およびtargets_new
targets
へ 。
例:
CREATE TABLE targets_new LIKE targets;
CREATE UNIQUE INDEX index_name
ON targets_new (a, b);
INSERT IGNORE INTO targets_new SELECT * FROM targets;
RENAME TABLE targets TO targets_old;
RENAME TABLE targets_new TO targets;