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

Loại bỏ các bản sao bằng chỉ mục duy nhất

Nếu bạn có các bản sao trong bảng của mình và bạn sử dụng

ALTER TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);

truy vấn sẽ không thành công với Lỗi 1062 (khóa trùng lặp).

Nhưng nếu bạn sử dụng IGNORE

-- (only works before MySQL 5.7.4)
ALTER IGNORE TABLE mytable ADD UNIQUE INDEX myindex (A, B, C, D);

các bản sao sẽ bị loại bỏ. Nhưng tài liệu không chỉ định hàng nào sẽ được giữ:

( Cú pháp ALTER TABLE )

Nếu phiên bản của bạn là 5.7.4 trở lên - bạn có thể:

  • Sao chép dữ liệu vào một bảng tạm thời (về mặt kỹ thuật, nó không cần phải là bảng tạm thời).
  • Cắt bớt bảng gốc.
  • Tạo CHỈ SỐ DUY NHẤT.
  • Và sao chép lại dữ liệu bằng INSERT IGNORE (vẫn còn).
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;

(CHÈN Cú pháp)

Cũng xem: CHÈN ... Cú pháp CHỌN So sánh Từ khóa BỎ QUA và Chế độ SQL nghiêm ngặt



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kết nối cơ sở dữ liệu laravel trả về lỗi chỉ mục không xác định

  2. Các ký tự Unicode (hệ thập lục phân) trong MySQL

  3. làm thế nào để kiểm tra xem truy vấn mysql trả về không có kết quả (không tìm thấy bản ghi) bằng php?

  4. Viết truy vấn con bằng Zend DB

  5. php, mysql - Lỗi quá nhiều kết nối đến cơ sở dữ liệu