MySQL - Padamkan Rekod Duplikat

Hai there, bakal ahli pangkalan data! Hari ini, kita akan melangkah ke dalam dunia MySQL, khususnya membahas bagaimana untuk memadamkan rekod duplikat yang menyusahkan. Sebagai guru komputer di sebelah anda, saya akan memandu anda melalui proses ini langkah demi langkah, pastikan anda memahami setiap bahagian daripadanya. Jadi, ambillah sweeping virtual anda, dan mari kita membersihkan pangkalan data itu!

MySQL - Delete Duplicate Records

Padamkan Rekod Duplikat MySQL

Sebelum kita masuk ke dalam detil memadamkan rekod duplikat, mari kitaambil sedikit masa untuk memahami mengapa ini penting. Bayangkan anda mengurus pangkalan data perpustakaan, dan secara tidak sengaja, anda mendapat beberapa entri buku yang sama. Ini tidak hanya membuang ruang tetapi juga boleh menyebabkan kekeliruan dan kesilapan. Itulah di mana operasi padamkan rekod duplikat kami datang berguna!

Apa Itu Rekod Duplikat?

Rekod duplikat adalah entri dalam jadual pangkalan data yang mempunyai nilai identik dalam satu atau lebih kolom. Dalam contoh perpustakaan kami, ini boleh menjadi buku dengan nombor ISBN, pengarang, dan judul yang sama.

Temui Nilai Duplikat

Sebelum kita dapat memadamkan rekod duplikat, kita perlu menjumpai mereka dahulu. Itu seperti bermain permainan "temui perbezaan," tetapi sebaliknya! Mari kita lihat beberapa metode untuk mengenalpasti duplikat ini.

Menggunakan GROUP BY dan klausa HAVING

SELECT column_name, COUNT(*) as count
FROM table_name
GROUP BY column_name
HAVING count > 1;

Query ini mengelompokkan rekod oleh kolom yang ditentukan dan menghitung berapa kali setiap nilai muncul. Klausa HAVING menyaring kelompok-kelompok dengan hitungan lebih daripada 1, secara efektif menunjukkan nilai duplikat kepada kita.

Contohnya, jika kita mencari buku duplikat dalam perpustakaan kami:

SELECT title, author, COUNT(*) as count
FROM books
GROUP BY title, author
HAVING count > 1;

Ini akan menunjukkan semua judul buku dan pengarang yang muncul lebih daripada sekali dalam pangkalan data kami.

Menggunakan Self JOIN

Metode lain untuk menjumpai duplikat adalah dengan menggunakan self JOIN:

SELECT t1.*
FROM table_name t1
JOIN table_name t2
WHERE t1.id < t2.id
AND t1.column_name = t2.column_name;

Query ini menyatukan jadual dengan dirinya sendiri dan membandingkan setiap rekod dengan rekod lain. Ia mengembalikan semua rekod duplikat kecuali yang mempunyai ID tertinggi.

Padamkan Rekod Duplikat

Sekarang kita telah menjumpai duplikat, ia waktunya untuk katakan selamat tinggal kepada mereka. Ada beberapa cara untuk melakukan ini, setiappunya mempunyai kelebihan dan kekurangan. Mari kita jelajahi mereka!

Menggunakan DELETE dengan Subquery

DELETE t1 FROM table_name t1
INNER JOIN table_name t2
WHERE t1.id < t2.id
AND t1.column_name = t2.column_name;

Query ini memadamkan semua rekod duplikat kecuali yang mempunyai ID tertinggi. Itu seperti permainan kursi muzik, dimana rekod terakhir yang berdiri tinggal!

Menggunakan CREATE TABLE dan INSERT

Metode lain adalah untuk membuat jadual baru dengan rekod unik dan kemudian menggantikan jadual asal:

CREATE TABLE temp_table AS
SELECT DISTINCT * FROM original_table;

DROP TABLE original_table;

ALTER TABLE temp_table RENAME TO original_table;

Metode ini seperti membuat salinan baru senarai lagu kesukaan anda, tetapi hanya menyimpan satu versi setiap lagu.

Menggunakan ROW_NUMBER()

Untuk pengguna lanjut, kita boleh menggunakan fungsi ROW_NUMBER():

DELETE FROM table_name
WHERE id NOT IN (
SELECT id
FROM (
SELECT id,
ROW_NUMBER() OVER (
PARTITION BY column_name
ORDER BY id
) AS row_num
FROM table_name
) t
WHERE t.row_num = 1
);

Ini memberikan nombor baris kepada setiap rekod dalam kumpulan nilai identik, kemudian memadamkan semua baris kecuali yang pertama dalam setiap kumpulan.

Padamkan Rekod Duplikat Menggunakan Program Klien

kadang-kadang, lebih mudah untuk menguruskan pemadamkan duplikat di luar MySQL. Berikut adalah skrip Python mudah yang dapat membantu:

import mysql.connector

def delete_duplicates(connection, table_name, column_name):
cursor = connection.cursor()

# Temui dan padamkan duplikat
query = f"""
DELETE t1 FROM {table_name} t1
INNER JOIN {table_name} t2
WHERE t1.id < t2.id
AND t1.{column_name} = t2.{column_name}
"""

cursor.execute(query)
connection.commit()

print(f"Memadamkan {cursor.rowcount} rekod duplikat.")

# Contoh penggunaan
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)

delete_duplicates(connection, "books", "isbn")

connection.close()

Skrip ini menyambungkan ke pangkalan data MySQL anda, menjalankan query pemadamannya, dan melaporkan berapa banyak duplikat yang dihapuskan. Itu seperti memiliki asisten pribadi untuk membersihkan pangkalan data anda!

Kesimpulan

Selamat! Anda kini telah belajar beberapa metode untuk menjumpai dan memadamkan rekod duplikat di MySQL. Ingat, memelihara pangkalan data yang bersih dan bebas duplikat adalah penting untuk integriti data dan operasi efisien.

Berikut adalah ringkasan metode yang kami cover:

Metode Kelebihan Kekurangan
GROUP BY dan HAVING Mudah difahami Hanya menjumpai duplikat, tidak memadamkan
Self JOIN Fleksibel, dapat membandingkan beberapa kolom Dapat lambat pada jadual besar
DELETE dengan Subquery Efektif untuk jadual kecil ke sederhana Dapat lambat pada jadual sangat besar
CREATE TABLE dan INSERT Menyimpan data asal Memerlukan ruang penyimpanan sementara
ROW_NUMBER() Sangat fleksibel dan kuat Sintaksis lebih kompleks
Program Klien Dapat mensertakan logik khusus Memerlukan pengprograman tambahan

Pilih metode yang paling cocok dengan keperluan khusus dan saiz pangkalan data anda. Dan ingat, selalu cadangkan data anda sebelum melakukan operasi pemadamkan. Selamat memadamkan duplikat!

Credits: Image by storyset