Rumah  >  Artikel  >  pangkalan data  >  Bolehkah Indeks Unik Mengeluarkan Pendua dalam Jadual dengan Pendua Sedia Ada, dan Bagaimana?

Bolehkah Indeks Unik Mengeluarkan Pendua dalam Jadual dengan Pendua Sedia Ada, dan Bagaimana?

Susan Sarandon
Susan Sarandonasal
2024-10-25 08:10:17249semak imbas

Can a Unique Index Remove Duplicates in a Table with Existing Duplicates, and How?

Mengalih Keluar Pendua dengan Indeks Unik

Dalam usaha untuk menghalang pemasukan data pendua, indeks biasa telah tersilap dicipta untuk medan A, B, C, dan D, mengakibatkan kehadiran rekod pendua dalam jadual rekod 20 juta. Timbul persoalan: adakah penambahan indeks unik untuk medan ini akan mengalih keluar pendua tanpa menjejaskan yang sedia ada?

Membetulkan Indeks dan Mengendalikan Pendua

Menambah indeks unik dengan Penyataan ALTER TABLE tanpa pengubahsuai IGNORE akan gagal kerana rekod unik sudah wujud. Walau bagaimanapun, menggunakan pengubah suai IGNORE akan mengalih keluar pendua.

Pendekatan Alternatif untuk MySQL Versi 5.7.4 dan Ke Atas

Untuk MySQL versi 5.7.4 dan ke atas, di mana Pengubah suai IGNORE tidak disokong, pendekatan berbeza disyorkan:

  1. Salin data ke jadual sementara.
  2. Potong jadual asal.
  3. Buat indeks unik .
  4. Salin data kembali ke jadual asal menggunakan INSERT IGNORE, buang mana-mana baris pendua.

Sintaks untuk Mengalih Keluar Pendua dengan INSERT IGNORE

<code class="sql">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;</code>

Pertimbangan Tambahan

Dokumentasi tidak menyatakan baris pendua yang akan dikekalkan selepas menggunakan pengubahsuai IGNORE. Adalah dinasihatkan untuk menguji ini pada set data yang lebih kecil sebelum menggunakan penyelesaian pada jadual besar.

Atas ialah kandungan terperinci Bolehkah Indeks Unik Mengeluarkan Pendua dalam Jadual dengan Pendua Sedia Ada, dan Bagaimana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn