Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

dọn dẹp db dữ liệu dư thừa

Thêm chỉ mục duy nhất trên vị trí bảng để không có bản ghi trùng lặp nào được chèn vào

ALTER IGNORE TABLE location ADD UNIQUE KEY ix1(country, city);

Thao tác này sẽ tự động xóa các bản ghi trùng lặp khỏi bảng và đối với các truy vấn chèn trong tương lai, bạn cần sử dụng INSERT IGNORE để tránh mắc lỗi trùng lặp.

nhưng theo đề xuất của @AD7six trong nhận xét, nó có thể không hoạt động trên các phiên bản MySQL 5.1.41,5.5.1-m2, 6.0 :xem lỗi tại đây

hoặc cách an toàn thay thế để loại bỏ các bản sao bằng cách sử dụng DELETE truy vấn:

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;

để đặt lại các giá trị của auto_increment cột locid , bạn chỉ có thể thả primary key trên locid và tạo lại nó:

ALTER TABLE location DROP column locid;
ALTER TABLE location 
      ADD COLUMN locid INT unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;

hoặc cách thay thế để đặt lại các giá trị của locid sử dụng UPDATE truy vấn:

SET var_locid = 0;

UPDATE location
SET locid = (@var_locid := @var_locid + 1)
ORDER BY locid ASC;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thay đổi bảng mà không cần khóa toàn bộ bảng

  2. Di chuyển MySQL UTF8 sang UTF8MB4 các vấn đề và câu hỏi

  3. Kết quả Hộp văn bản tự động hoàn thành dựa trên cơ sở dữ liệu SQL

  4. Truy vấn để nhận giá trị thấp nhất lớn hơn 0 ans không phải là NULL

  5. Chọn mysql đệ quy?