Saya memiliki tabel database MySQL dengan dua kolom yang menarik minat saya. Secara individual mereka masing-masing dapat memiliki duplikat, tetapi mereka tidak boleh memiliki duplikat KEDUA dari mereka yang memiliki nilai yang sama.
stone_id
dapat memiliki duplikat selama untuk setiap upsharge
judul berbeda, dan sebaliknya. Tetapi katakanlah misalnya stone_id
= 412 dan upcharge_title
= "safir" bahwa kombinasi hanya boleh muncul sekali.
Ini bagus:
stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "ruby"
Ini TIDAK OK:
stone_id = 412 upcharge_title = "sapphire"
stone_id = 412 upcharge_title = "sapphire"
Apakah ada kueri yang akan menemukan duplikat di kedua bidang? Dan jika memungkinkan, adakah cara untuk mengatur basis data saya agar tidak mengizinkannya?
Saya menggunakan MySQL versi 4.1.22
sumber
Saya merasa terbantu untuk menambahkan indeks unqiue menggunakan "ALTER IGNORE" yang menghapus duplikat dan memberlakukan catatan unik yang sepertinya ingin Anda lakukan. Jadi sintaksnya adalah:
Ini secara efektif menambahkan batasan unik yang berarti Anda tidak akan pernah memiliki catatan duplikat dan ABAIKAN menghapus duplikat yang ada.
Anda dapat membaca lebih lanjut tentang eh ALTER IGNORE di sini: http://mediakey.dk/~cc/mysql-remove-duplicate-entries/
Pembaruan: Saya diberitahu oleh @Inquisitive bahwa ini mungkin gagal di versi MySql> 5.5:
Pembaruan -
ALTER IGNORE
Dihapus di 5.7Dari dokumen
Salah satu pengembang MySQL memberikan dua alternatif :
INSERT IGNORE
, mis:Tetapi tergantung pada ukuran meja Anda, ini mungkin tidak praktis
sumber
Anda dapat menemukan duplikat seperti ini ..
sumber
Untuk menemukan duplikat:
Untuk membatasi agar menghindari hal ini di masa mendatang, buat kunci unik gabungan pada dua bidang ini.
sumber
Secara kebetulan, batasan unik komposit di atas tabel akan mencegah hal ini terjadi sejak awal.
(Ini adalah T-SQL yang valid. Tidak yakin tentang MySQL.)
sumber
posting SO ini membantu saya, tetapi saya juga ingin tahu cara menghapus dan menyimpan salah satu baris ... berikut adalah solusi PHP untuk menghapus baris duplikat dan menyimpannya (dalam kasus saya hanya ada 2 kolom dan itu ada di fungsi untuk menghapus asosiasi kategori duplikat)
(batas NUM_DUPES - 1) adalah yang mempertahankan satu baris ...
Terima kasih semuanya
sumber
ALTER IGNORE TABLE table ADD UNIQUE INDEX index_name(stone_id, charge_title)
akan menghapus baris duplikat dan hanya menyisakan satu pasangan unik.