MySQL xóa records trùng lặp trước khi tạo index unique

BBMCode đã đăng vào lúc 11:07:03 23/07/2024 | đọc khoảng 2 phút, có 261 từ

Trên thực tế, đôi khi chúng ta sẽ gặp yêu cầu như có một table đã tồn tại trong thời gian dài nhưng lại cần chỉnh sửa một/nhiều column nào đó thành duy nhất (index unique). Dữ liệu thì có nhiều records trùng nhau. Vậy việc cần thiết phải làm là gì?

 

- Trước hết sẽ phải chấp nhận xóa đi các dòng dữ liệu trùng lặp (duplicated records)

- Sau đó sẽ alter table và add index unique vào columns.

 

Ví dụ cụ thể như bên dưới

DELETE FROM `site_countries` WHERE `site_country_id` IN (
    SELECT * FROM (
        SELECT site_country_id
        FROM `site_countries`
        GROUP BY `site_id` , `country_id`
        HAVING COUNT(*) > 1
    ) AS x
)

ALTER TABLE `site_countries` ADD UNIQUE (
    `site_id`,
    `country_id`
);

 

cột site_country_id là khóa chính của table site_countries

Câu DELETE sẽ xóa các dòng có site_idcountry_id trùng nhau (duplicated records)

và sau cùng là ALTER TABLE để unique 2 columns : site_idcountry_id.