Bagaimana MySQL Menghapus Baris Duplikat

How Mysql Delete Duplicate Rows

MySQL adalah dataset relasional yang menyimpan data dalam tabel yang memiliki baris dan kolom. Namun, data yang disimpan dalam database mungkin berisi nilai duplikat yang disebabkan oleh kesalahan dalam aplikasi atau pengguna.

Dalam tutorial ini, kita akan belajar cara menghapus baris duplikat dalam database MySQL untuk mengurangi ukuran database dan membantu meningkatkan kinerja server.



Sebelum kita melanjutkan, kita asumsikan:



  1. Anda telah menginstal dan menjalankan MySQL di sistem Anda
  2. Anda memiliki akses root ke database.
  3. Anda memiliki akses ke database untuk bereksperimen atau menguji

CATATAN : Jika Anda memerlukan database sampel untuk mencoba konsep yang disediakan dalam panduan ini, harap pertimbangkan database Sakila atau unduh salinan database yang digunakan dalam panduan ini.



Sumber daya disediakan di bawah ini:

Penggunaan Dasar

Sebelum kita mulai, kita akan dengan sengaja membuat tabel yang berisi nilai duplikat untuk tujuan pengujian. Kueri SQL untuk melakukan tindakan ini di bawah ini:

MENGGUNAKAN dunia;
MENJATUHKAN MEJA JIKA ADA pengguna;
MEMBUAT MEJA pengguna(Indo INT KUNCI UTAMA BUKAN BATAL AUTO_INCREMENT ,nama pengguna VARCHAR (10) BUKAN BATAL ,nama lengkap VARCHAR (dua puluh),surel VARCHAR (255) BUKAN BATAL );
MEMASUKKAN KE DALAM pengguna(nama pengguna,nama lengkap,surel) NILAI
('Virgo', 'Claude M. Mori', ' [dilindungi email] '),
('tekan', 'Tiffany G. Bailey', ' [dilindungi email] '),
('roket', 'Christopher S.Payton', ' [dilindungi email] '),
('materi gelap', 'Patricia J. Fox', ' [dilindungi email] '),
('subjek', 'Faye H.Hartley', ' [dilindungi email] '),
('materi gelap', 'Patricia J. Fox', ' [dilindungi email] '),
('roket', 'Christopher S.Payton', ' [dilindungi email] '),
('artemis', 'Wesley C. Dillard', ' [dilindungi email] ');

Jangan ragu untuk memodifikasi kueri di atas agar sesuai dengan kebutuhan Anda. Anda juga harus memastikan bahwa Anda memiliki database (dunia) yang dibuat untuk menghindari kesalahan.



Sekarang, jika kita mendapatkan semua data di dalam tabel dan diurutkan berdasarkan nama pengguna, kita akan melihat duplikat yang kita miliki seperti yang ditunjukkan:

mysql> menggunakan dunia;
Basis data berubah
mysql> PILIH * DARI pengguna DIPESAN OLEH nama pengguna;
+ ---- + ------------ + ------------ + ------- ---------------- +
|Indo|nama pengguna|nama lengkap|surel|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |artemis|Wesley C. Dillard|[dilindungi email]|
| 4 |materi gelap|Patricia J. Fox|[dilindungi email]|
| 6 |materi gelap|Patricia J. Fox|[dilindungi email]|
| 2 |tekan|Tiffany G. Bailey|[dilindungi email]|
| 5 |subjek|Faye H. Hartley|[dilindungi email]|
| 3 |roket|Christopher S. Payton|[dilindungi email]|
| 7 |roket|Christopher S. Payton|[dilindungi email]|
| 1 |Virgo|Claude M. Mori|[dilindungi email]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

Seperti yang Anda lihat dari tabel di atas, kami memiliki dua nilai duplikat yang membuat database lebih besar tanpa alasan dan menyebabkan kecepatan lambat.

Sekarang mari kita pelajari bagaimana kita dapat menghapus nilai-nilai ini.

#1 – HAPUS GABUNG

Salah satu cara untuk menghapus baris duplikat dalam database adalah dengan menggunakan pernyataan MySQL DELETE JOIN. Kueri, bagaimanapun, menggunakan id untuk menghapus nilai duplikat.

Misalnya, untuk menghapus nilai duplikat pada tabel pengguna di atas, kita dapat memasukkan:

MENGHAPUS Tabel 1 DARI tabel pengguna1 BATIN IKUTI tabel pengguna2 DI MANA tabel1.id<tabel2.id DAN tabel1. email=tabel2. email;

Setelah Anda menjalankan kueri di atas, Anda akan menghapus nilai duplikat seperti yang ditunjukkan pada output di bawah ini:

mysql> MENGHAPUS Tabel 1 DARI tabel pengguna1 BATIN IKUTI tabel pengguna2 DI MANA tabel1.id<tabel2.id DAN tabel1. email=tabel2. email;
Permintaan Oke, 2baris terpengaruh(0,01detik)

mysql> PILIH * DARI pengguna DIPESAN OLEH nama pengguna;
+ ---- + ------------ + ------------ + ------- ---------------- +
|Indo|nama pengguna|nama lengkap|surel|
+ ---- + ------------ + ----------------------- + ------- ---------------- +
| 8 |artemis|Wesley C. Dillard|[dilindungi email]|
| 6 |materi gelap|Patricia J. Fox|[dilindungi email]|
| 2 |tekan|Tiffany G. Bailey|[dilindungi email]|
| 5 |subjek|Faye H. Hartley|[dilindungi email]|
| 7 |roket|Christopher S. Payton|[dilindungi email]|
| 1 |Virgo|Claude M. Mori|[dilindungi email]|
+ ---- + ------------ + ------------ + ------- ---------------- +

#2 – Fungsi Row_Number()

Metode kedua yang dapat kita terapkan adalah dengan menggunakan fungsi MySQL row_number(). Fungsi ini didukung di MySQL versi 8 dan lebih tinggi.

Ini bekerja dengan menetapkan nilai int berurutan ke setiap baris, dengan baris yang berisi nilai duplikat mendapatkan nilai lebih tinggi dari 1.

Untuk mempelajari lebih lanjut tentang fungsi ini, gunakan sumber daya yang disediakan di bawah ini:

https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html#function_row-number

Pertimbangkan kueri di bawah ini yang mengembalikan id baris dengan nilai duplikat:

PILIH Indo DARI ( PILIH Indo,ROW_NUMBER()LEBIH( PARTISI OLEH nama pengguna DIPESAN OLEH nama pengguna) SEBAGAI baris_var DARI pengguna)t1 DI MANA baris_var> 1;

Setelah Anda menjalankan kueri di atas, Anda akan mendapatkan daftar id seperti yang ditunjukkan pada output di bawah ini:

+ ---- +
|Indo|
+ ---- +
| 6 |
| 7 |
+ ---- +
2baris di dalam mengatur (0,01detik)

Jika Anda ingin menghapus nilai, cukup ganti pernyataan SELECT dengan pernyataan DELETE seperti yang ditunjukkan di bawah ini:

MENGHAPUS DARI pengguna DI MANA Indo DI DALAM ( PILIH Indo DARI ( PILIH Indo,ROW_NUMBER()LEBIH( PARTISI OLEH nama pengguna DIPESAN OLEH nama pengguna) SEBAGAI baris_var DARI pengguna)t1 DI MANA baris_var> 1);

Terakhir, Anda dapat memverifikasi bahwa nilai duplikat dihapus menggunakan pernyataan SELECT.

mysql> PILIH * dari pengguna DIPESAN OLEH nama pengguna;
+ ---- + ------------ + ------------ + ------- ---------------- +
|Indo|nama pengguna|nama lengkap|surel|
+ ---- + ------------ + ------------ + ------- ---------------- +
| 8 |artemis|Wesley C. Dillard|[dilindungi email]|
| 4 |materi gelap|Patricia J. Fox|[dilindungi email]|
| 2 |tekan|Tiffany G. Bailey|[dilindungi email]|
| 5 |subjek|Faye H. Hartley|[dilindungi email]|
| 3 |roket|Christopher S. Payton|[dilindungi email]|
| 1 |Virgo|Claude M. Mori|[dilindungi email]|
+ ---- + ------------ + ----------------------- + ------- ---------------- +

Kesimpulan

Dalam tutorial ini, kami membahas dua metode untuk menghapus nilai duplikat dari database. Basis data besar, terutama yang umum digunakan, mungkin berisi banyak nilai duplikat dari impor eksternal dan kesalahan lainnya. Oleh karena itu, ada kebutuhan untuk terus membersihkan nilai duplikat untuk memastikan bahwa aplikasi bekerja secara optimal.