重複するレコードが挿入されないように、テーブルの場所に一意のインデックスを追加します
ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);
これにより、重複するレコードがテーブルから自動的に削除されます。今後の挿入クエリでは、INSERT IGNOREを使用する必要があります。 重複エラーを回避するための句。
しかし、@AD7sixによって提案されたように コメントでは、MySQLバージョン5.1.41,5.5.1-m2, 6.0では機能しない可能性があります :バグこちら
を参照してください
または、DELETEを使用して重複を削除する別の安全な方法 クエリ:
DELETE a
FROM location a
LEFT JOIN (
SELECT locid
FROM location
GROUP BY country, city
)b
ON a.locid = b.locid
WHERE b.locid IS NULL;
auto_incrementの値を再設定します 列locid 、primary keyをドロップするだけです locidで そしてそれを再作成します:
ALTER TABLE location DROP column locid;
ALTER TABLE location
ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
またはlocidの値を再設定する別の方法 UPDATEを使用する クエリ:
SET var_locid = 0;
UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;