Latest web development tutorials

MySQL menangani data ganda

Mungkin ada beberapa MySQL tabel data duplikat catatan, dalam beberapa kasus kita membiarkan data ganda, tapi kadang-kadang kita perlu menghapus data ganda.

bab ini kita akan memperkenalkan bagaimana mencegah duplikasi data tabel data dan cara menghapus data ganda pada tabel data.


Mencegah duplikasi data dalam tabel muncul

Anda dapat mengatur field dalam tabel data MySQL untuk PRIMARY KEY (kunci utama) atau UNIK index (unik) untuk memastikan keunikan data.

Mari kita coba contoh: di bawah meja tanpa indeks dan kunci primer, sehingga meja memungkinkan beberapa catatan duplikat muncul.

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

Jika Anda ingin mengatur meja bidang first_name, data yang last_name tidak dapat diulang, Anda dapat mengatur mode kunci ganda utama untuk mengatur sifat unik dari data, jika Anda menyiapkan kunci utama ganda, maka nilai default kunci yang tidak dapat NULL, dapat diatur untuk 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, kemudian memasukkan data ganda, pernyataan SQL tidak akan dijalankan dengan sukses, dan membuang salah.

INSERT Abaikan INTO perbedaan adalah bahwa dengan INSERT INTO INSERT Abaikan mengabaikan data yang sudah ada dalam database, jika database tidak memiliki data, memasukkan data baru jika ada data, kemudian melewati data ini. Sehingga Anda dapat menyimpan data sudah ada dalam database, untuk mencapai tujuan data yang disisipkan di celah.

Contoh berikut menggunakan INSERT Abaikan INTO, tidak bisa salah setelah implementasi, tidak akan menyisipkan duplikat untuk 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 Abaikan INTO Ketika memasukkan data, setelah pengaturan keunikan catatan, jika Anda memasukkan data ganda, tidak akan kembali kesalahan, ia mengembalikan hanya sebagai peringatan. REPLACE INTO ke dalam catatan yang sama jika kehadiran utama atau unik, pertama dihapus. Kemudian memasukkan catatan baru.

set data adalah satu-satunya cara adalah dengan menambahkan indeks UNIK, sebagai berikut:

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

Statistik data ganda

Di bawah ini kita akan mengulangi catatan jumlah tabel di first_name dan last_name:

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

Query di atas akan kembali person_tbl menduplikasi jumlah record dalam tabel. Dalam keadaan normal, nilai permintaan berulang, lakukan hal berikut:

  • Menentukan kolom berisi nilai dapat diulang.
  • Dalam daftar pilihan kolom penggunaan COUNT (*) yang tercantum dalam kolom.
  • Kolom tercantum dalam klausa GROUP BY.
  • Klausa HAVING menetapkan jumlah pengulangan lebih besar dari 1.

Filter data ganda

Jika Anda perlu membaca data yang unik dapat menggunakan kata kunci yang berbeda dalam laporan SELECT untuk menyaring data ganda.

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

Anda juga dapat menggunakan GROUP BY untuk membaca data dalam tabel tidak data ganda:

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

deduplication

Jika Anda ingin menghapus data ganda 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);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

Tentu saja, Anda juga dapat menambahkan INDEX (index) dan Arteri Sekunder KEY (kunci utama) metode sederhana ini dalam tabel data untuk menghapus duplikat catatan dalam tabel. Berikut caranya:

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