Tabel atau set hasil kadang-kadang berisi catatan duplikat. Kadang itu diperbolehkan tetapi kadang diperlukan untuk menghentikan duplikat catatan. Kadang diperlukan untuk mengidentifikasi dan menghapus duplikat catatan mereka dari meja. Bab ini akan menjelaskan bagaimana mencegah duplikat catatan dalam sebuah tabel yang terjadi dan bagaimana untuk menghapus duplikat catatan sudah ada
Mencegah Duplikat dari Kejadiannya Tabel:
Anda dapat menggunakan PRIMARY KEY atau UNIQUE Indeks di atas meja dengan bidang yang sesuai untuk menghentikan duplikat catatan. Mari kita mengambil satu contoh, Tabel berikut berisi ada indeks kunci primer atau, sehingga akan memungkinkan catatan duplikat untuk first_name dan last_name
CREATE TABLE person_tbl
(
first_name CHAR(20),
last_name CHAR(20),
sex CHAR(10)
);
Untuk mencegah beberapa catatan dengan nilai-nilai nama yang sama pertama dan terakhir dari
yang dibuat dalam tabel ini, menambahkan PRIMARY KEY untuk definisi. Ketika Anda melakukan ini,
itu juga perlu untuk menyatakan kolom diindeks menjadi NOT NULL, PRIMARY KEY karena
tidak mengijinkan nilai NULL:
CREATE TABLE person_tbl
(
first_name CHAR(20) NOT NULL,
last_name CHAR(20) NOT NULL,
sex CHAR(10)
PRIMARY KEY (last_name, first_name)
);
Kehadiran indeks yang unik dalam tabel biasanya menyebabkan kesalahan terjadi jika Anda
menyisipkan catatan ke dalam tabel yang duplikat catatan yang ada dalam kolom atau kolom yang
mendefinisikan indeks.
Gunakan INSERT IGNORE daripada INSERT. Jika catatan tidak menduplikasi catatan yang ada, MySQL
sisipan seperti biasa. Jika record merupakan duplikat, kata kunci IGNORE memberitahu MySQL untuk
membuangnya diam-diam tanpa menghasilkan kesalahan.
Berikut contoh kesalahan tidak keluar dan saat yang sama tidak akan menyisipkan duplikat catatan.
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
-> VALUES( ‘Jay’, ‘Thomas’);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
-> VALUES( ‘Jay’, ‘Thomas’);
Query OK, 0 rows affected (0.00 sec)
Gunakan REPLACE bukan INSERT. Jika catatan yang baru, itu dimasukkan hanya sebagai dengan INSERT.
Jika itu duplikat, catatan baru menggantikan yang lama:
mysql> REPLACE INTO person_tbl (last_name, first_name)
-> VALUES( ‘Ajay’, ‘Kumar’);
Query OK, 1 row affected (0.00 sec)
mysql> REPLACE INTO person_tbl (last_name, first_name)
-> VALUES( ‘Ajay’, ‘Kumar’);
Query OK, 2 rows affected (0.00 sec)
INSERT Abaikan dan REPLACE harus dipilih sesuai dengan perilaku duplikat penanganan Anda ingin efek.
INSERT Abaikan menjaga pertama dari set catatan digandakan dan membuang sisanya. REPLACE terus
yang terakhir dari serangkaian duplikat dan menghapus apapun yang sebelumnya.
Cara lain untuk menegakkan keunikan adalah menambahkan indeks UNIK daripada PRIMARY KEY ke sebuah meja.
CREATE TABLE person_tbl ( first_name CHAR(20) NOT NULL, last_name CHAR(20) NOT NULL, sex CHAR(10) UNIQUE (last_name, first_name) );
Menghitung dan Mengidentifikasi Duplikat:
Berikut ini adalah query untuk menghitung catatan duplikat dengan first_name dan last_name dalam sebuah tabel.
mysql> SELECT COUNT(*) as repetitions, last_name, first_name
-> FROM person_tbl
-> GROUP BY last_name, first_name
-> HAVING repetitions > 1;
Query ini akan mengembalikan daftar semua duplikat catatan dalam tabel person_tbl.
Secara umum, untuk mengidentifikasi set nilai-nilai yang diduplikasi, lakukan hal berikut:
- Tentukan kolom yang berisi nilai-nilai yang dapat diduplikasi.
- Daftar orang-kolom dalam daftar pilihan kolom, bersama dengan COUNT (*).
- Daftar kolom dalam klausa GROUP BY juga.
- Tambahkan klausa HAVING yang menghilangkan nilai-nilai yang unik dengan mengharuskan jumlah kelompok lebih besar dari satu.
Menghilangkan Duplikat dari Hasil Query:
Anda dapat menggunakan DISTINCT bersama dengan pernyataan SELECT untuk mengetahui catatan unik yang tersedia dalam sebuah tabel.
mysql> SELECT DISTINCT last_name, first_name
-> FROM person_tbl
-> ORDER BY last_name;
Sebuah alternatif untuk DISTINCT adalah dengan menambahkan klausa GROUP BY nama kolom yang Anda memilih.
Hal ini memiliki efek menghilangkan duplikat dan memilih hanya kombinasi unik dari nilai-nilai dalam
kolom yang ditentukan:
mysql> SELECT last_name, first_name -> FROM person_tbl -> GROUP BY (last_name, first_name);
Menghapus Duplikat Menggunakan Penggantian Tabel:
Jika Anda memiliki duplikat catatan dalam sebuah tabel dan Anda ingin menghapus semua duplikat catatan dari meja itu maka di sini adalah prosedur.
mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
-> FROM person_tbl;
-> GROUP BY (last_name, first_name);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;
Cara mudah untuk menghilangkan duplikat catatan dari tabel adalah bahwa menambahkan atau
PRIMAY INDEKS KUNCI ke meja itu. Bahkan jika tabel ini sudah tersedia, anda dapat menggunakan
teknik ini untuk menghapus duplikat catatan dan Anda akan aman di masa depan juga.
mysql> ALTER IGNORE TABLE person_tbl -> ADD PRIMARY KEY (last_name, first_name);