Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menghapus duplikat dengan indeks unik

Jika Anda memiliki duplikat di tabel Anda dan Anda menggunakan

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

kueri akan gagal dengan Kesalahan 1062 (kunci duplikat).

Tetapi jika Anda menggunakan IGNORE

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

duplikat akan dihapus. Tetapi dokumentasi tidak menentukan baris mana yang akan disimpan:

(ALTER TABLE Syntax )

Jika versi Anda 5.7.4 atau lebih tinggi - Anda dapat:

  • Salin data ke tabel sementara (secara teknis tidak perlu bersifat sementara).
  • Memotong tabel asli.
  • Buat INDEKS UNIK.
  • Dan salin kembali data tersebut dengan INSERT IGNORE (yang masih tersedia).
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;

(INSERT Syntax)

Lihat juga:INSERT ... SELECT Syntax dan Perbandingan Kata Kunci IGNORE dan Mode SQL Ketat



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. kesalahan konektivitas php MySql

  2. Memeriksa apakah pengguna mysql ada

  3. CAST ke DECIMAL di MySQL

  4. Bagaimana saya bisa menggambarkan semua tabel dalam database melalui satu pernyataan?

  5. Basis data tidak diperbarui secara otomatis dengan MySQL dan Python