Bagaimana kueri MySQL menangani data duplikat?Filter untuk menghapus pernyataan data duplikat

MySQLBagaimana kueri menangani data duplikat?Filter untuk menghapus pernyataan data duplikat

MySQL Menangani data duplikat

Mungkin ada catatan duplikat di beberapa tabel data MySQL. Dalam beberapa kasus, kami mengizinkan adanya data duplikat, tetapi terkadang kami juga perlu menghapus data duplikat ini.

Dalam bab ini, kami akan memperkenalkan cara mencegah duplikat data dalam tabel data dan cara menghapus data duplikat dalam tabel data.


Mencegah duplikat data dalam tabel

Anda dapat mengatur bidang yang ditentukan dalam tabel data MySQL sebagai KUNCI UTAMA atau UNIK (unik) Indeks untuk memastikan keunikan data.

Mari kita coba sebuah contoh: Tidak ada indeks dan kunci utama dalam tabel di bawah ini, sehingga tabel memungkinkan beberapa catatan duplikat.

CREATE TABLE person_tbl
(
    first_name CHAR(20),
    last_name CHAR(20),
    sex CHAR(10)
);

Jika Anda ingin mengatur field first_name dan last_name dalam tabel, data tidak dapat diulang, Anda dapat mengatur mode kunci utama ganda untuk mengatur keunikan data.Jika Anda mengatur kunci utama ganda, nilai default dari kunci itu tidak boleh NULL, tetapi dapat disetel ke NOT NULL.Sebagai berikut:

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)
);

Jika kita menetapkan indeks unik, maka saat memasukkan data duplikat, pernyataan SQL akan gagal dijalankan dengan sukses dan menimbulkan kesalahan.

Perbedaan INSERT IGNORE INTO dan INSERT INTO adalah INSERT IGNORE mengabaikan data yang sudah ada di database, jika tidak ada data di database akan memasukkan data baru, dan jika ada data akan melewatkan data ini.Dengan cara ini, data yang ada dalam database dapat dipertahankan, dan tujuan memasukkan data ke dalam celah dapat tercapai.

Contoh berikut menggunakan INSERT IGNORE INTO, yang dijalankan tanpa kesalahan dan tidak memasukkan data duplikat ke dalam tabel data:

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)

INSERT IGNORE INTO Saat memasukkan data, setelah keunikan record ditetapkan, jika data duplikat dimasukkan, tidak ada kesalahan yang akan dikembalikan, tetapi hanya peringatan yang akan dikembalikan.Dan REPLACE INTO menjadi jika ada record utama atau unik, hapus terlebih dahulu.Masukkan catatan baru.

Cara lain untuk mengatur keunikan data Anda adalah dengan menambahkan indeks UNIK seperti ini:

CREATE TABLE person_tbl
(
   first_name CHAR(20) NOT NULL,
   last_name CHAR(20) NOT NULL,
   sex CHAR(10)
   UNIQUE (last_name, first_name)
);

Data duplikat statistik

Di bawah ini kita akan menghitung jumlah duplikat record first_name dan last_name dalam tabel:

mysql> SELECT COUNT(*) as repetitions, last_name, first_name
    -> FROM person_tbl
    -> GROUP BY last_name, first_name
    -> HAVING repetitions > 1;

Pernyataan kueri di atas akan mengembalikan jumlah catatan duplikat di tabel person_tbl.Secara umum, untuk meminta nilai duplikat, lakukan hal berikut:

  • Tentukan kolom mana yang berisi kemungkinan nilai duplikat.
  • Gunakan COUNT(*) di kolom pilih daftar untuk membuat daftar kolom tersebut.
  • Kolom yang tercantum dalam klausa GROUP BY.
  • Klausa HAVING menetapkan jumlah pengulangan lebih besar dari 1.

menyaring data duplikat

Jika Anda perlu membaca data unik, Anda dapat menggunakan kata kunci DISTINCT dalam pernyataan SELECT untuk memfilter data duplikat.

mysql> SELECT DISTINCT last_name, first_name
    -> FROM person_tbl;

Anda juga dapat menggunakan GROUP BY untuk membaca data unik dari tabel:

mysql> SELECT last_name, first_name
    -> FROM person_tbl
    -> GROUP BY (last_name, first_name);

menghapus duplikat data

Jika Anda ingin menghapus data duplikat dalam tabel data, Anda dapat menggunakan pernyataan SQL berikut:

mysql> CREATE TABLE tmp SELECT last_name, first_name, sex
    ->                  FROM person_tbl;
    ->                  GROUP BY (last_name, first_name, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

Tentu saja, Anda juga dapat menambahkan INDEX (indeks) dan PRIMAY KEY (kunci utama) dalam tabel data untuk menghapus catatan duplikat dalam tabel.Metode seperti di bawah ini:

mysql> ALTER IGNORE TABLE person_tbl
    -> ADD PRIMARY KEY (last_name, first_name);

Harapan Chen Weiliang Blog ( https://www.chenweiliang.com/ ) berbagi "Bagaimana cara MySQL melakukan kueri dan menangani data duplikat?Penyaringan dan Pernyataan Deduplikasi" akan membantu Anda.

Selamat datang untuk membagikan tautan artikel ini:https://www.chenweiliang.com/cwl-499.html

Selamat datang di saluran Telegram blog Chen Weiliang untuk mendapatkan pembaruan terkini!

🔔 Jadilah orang pertama yang mendapatkan "Panduan Penggunaan Alat AI Pemasaran Konten ChatGPT" yang berharga di direktori teratas saluran! 🌟
📚 Panduan ini mengandung nilai yang sangat besar, 🌟Ini adalah kesempatan langka, jangan sampai terlewatkan! ⏰⌛💨
Bagikan dan sukai jika Anda suka!
Berbagi dan suka Anda adalah motivasi berkelanjutan kami!

 

发表 评论

Alamat email Anda tidak akan dipublikasikan. 必填 项 已 用 * 标注

滚动 到 顶部