MariaDB - Mengelola Duplikat

MariaDB, seperti yang dibahas dalam pelajaran sebelumnya, memungkinkan catatan dan tabel duplikat dalam beberapa situasi. Beberapa dari duplikat ini sebenarnya bukan duplikat karena data atau tipe objek yang berbeda, atau sebagai hasil dari masa pakai atau penyimpanan yang unik dari objek operasi. Duplikat ini juga biasanya tidak menimbulkan masalah.

Dalam beberapa situasi, duplikat memang menyebabkan masalah, dan duplikat sering kali muncul karena tindakan implisit atau kebijakan perintah MariaDB yang lunak. Ada cara untuk mengontrol masalah ini, menemukan duplikat, menghapus duplikat, dan mencegah pembuatan duplikat.

Strategi dan Alat

Ada empat cara utama untuk mengelola duplikat -

  • Pancing mereka dengan JOIN, dan hapus dengan tabel sementara.

  • Gunakan INSERT ... ON DUPLICATE KEY UPDATE untuk memperbarui penemuan duplikat.

  • Gunakan DISTINCT untuk memangkas hasil pernyataan SELECT dan menghapus duplikat.

  • Gunakan INSERT IGNORE untuk menghentikan penyisipan duplikat.

Menggunakan Bergabung dengan Tabel Sementara

Cukup lakukan semi-join seperti inner join, lalu hapus duplikat yang ditemukan dengan tabel sementara.

Menggunakan INSERT

Ketika INSERT ... ON DUPLICATE KEY UPDATE menemukan duplikat kunci unik atau utama, ia melakukan pembaruan. Saat menemukan beberapa kunci unik, itu hanya memperbarui yang pertama. Karenanya, jangan gunakan pada tabel dengan beberapa indeks unik.

Tinjau contoh berikut, yang mengungkapkan apa yang terjadi dalam tabel yang berisi nilai terindeks saat penyisipan ke dalam bidang terisi -

INSERT INTO add_dupl VALUES (1,'Apple');
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

Note - Jika tidak menemukan kunci, pernyataan INSERT ... ON DUPLICATE KEY UPDATE dijalankan seperti pernyataan insert normal.

Menggunakan DISTINCT

Klausa DISTINCT menghapus duplikat dari hasil. Sintaks umum untuk klausa DISTINCT adalah sebagai berikut -

SELECT DISTINCT fields
FROM table
[WHERE conditions];

Note - Hasil pernyataan dengan klausa DISTINCT -

  • Saat menggunakan satu ekspresi, ini mengembalikan nilai unik untuknya.

  • Saat menggunakan beberapa ekspresi, ini mengembalikan kombinasi unik.

  • Itu tidak mengabaikan nilai NULL; dengan demikian, hasil juga mengandung NULL sebagai nilai unik.

Tinjau pernyataan berikut menggunakan klausa DISTINCT untuk ekspresi tunggal -

SELECT DISTINCT product_id
FROM products
WHERE product_name = 'DustBlaster 5000';

Tinjau contoh berikut menggunakan beberapa ekspresi -

SELECT DISTINCT product_name, product_id
FROM products
WHERE product_id < 30

Menggunakan INSERT IGNORE

Pernyataan INSERT IGNORE menginstruksikan MariaDB untuk membatalkan penyisipan saat ditemukannya rekaman duplikat. Tinjau contoh penggunaannya yang diberikan di bawah ini -

mysql> INSERT IGNORE INTO customer_tbl (LN, FN)
   VALUES( 'Lex', 'Luther');

Juga, perhatikan logika di balik duplikat. Beberapa tabel memerlukan duplikat berdasarkan sifat data tabel tersebut. Mengakomodasi kebutuhan itu dalam strategi Anda untuk mengelola rekaman duplikat.