MySQL mengendalikan data pendua
MySQL mengendalikan data pendua
Sesetengah jadual data MySQL mungkin mempunyai rekod pendua, dan dalam beberapa kes kami membenarkan kewujudan pendua data , tetapi kadangkala kami juga perlu memadamkan data pendua ini.
Dalam bab ini kami akan memperkenalkan cara menghalang data pendua daripada muncul dalam jadual data dan cara memadam data pendua dalam jadual data.
Halang data pendua dalam jadual
Anda boleh menetapkan medan yang ditentukan dalam jadual data MySQL sebagai KUNCI UTAMA (kunci utama) atau UNIK (unik) indeks untuk memastikan keunikan data.Mari kita cuba contoh: tiada indeks dan kunci utama dalam jadual berikut, jadi jadual membenarkan berbilang rekod pendua.
CREATE TABLE person_tbl ( first_name CHAR(20), last_name CHAR(20), sex CHAR(10) );Jika anda ingin menetapkan medan first_name dan last_name dalam jadual, data tidak boleh diulang Anda boleh menetapkan mod kunci primer dwi untuk menetapkan keunikan data. Jika anda menyediakan kunci utama dwi, nilai lalai kunci itu tidak boleh NULL dan boleh ditetapkan kepada NOT NULL. Seperti yang ditunjukkan di bawah:
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 apabila memasukkan data pendua, pernyataan SQL tidak akan berjaya dilaksanakan dan ralat akan dilemparkan.
Perbezaan antara INSERT IGNORE INTO dan INSERT INTO ialah INSERT IGNORE akan mengabaikan data yang sudah ada dalam database Jika tiada data dalam database, data baru akan dimasukkan adalah data, data akan dilangkau. Dengan cara ini, data sedia ada dalam pangkalan data boleh dikekalkan untuk mencapai tujuan memasukkan data dalam jurang.
Contoh berikut menggunakan INSERT IGNORE INTO Tidak akan ada ralat selepas pelaksanaan, dan tiada data pendua akan dimasukkan ke dalam jadual 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 AGNORE INTO Apabila memasukkan data, set Selepas memastikan keunikan rekod, jika data pendua dimasukkan, tiada ralat akan dikembalikan, hanya amaran akan dikembalikan. Jika REPLACE INTO ke dalam rekod dengan asas atau unik yang sama wujud, ia akan dipadamkan terlebih dahulu. Kemudian masukkan rekod baharu.
Cara lain untuk menetapkan keunikan data anda ialah dengan menambah 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) )
Kira data pendua
Di bawah ini kami akan mengira bilangan rekod pendua nama_pertama dan nama_akhir dalam jadual:
mysql> SELECT COUNT(*) as repetitions, last_name, first_name -> FROM person_tbl -> GROUP BY last_name, first_name -> HAVING repetitions > 1;Pernyataan pertanyaan di atas akan mengembalikan bilangan rekod pendua dalam jadual person_tbl. Secara umum, untuk membuat pertanyaan bagi nilai pendua, lakukan perkara berikut:
Tentukan lajur yang mengandungi nilai yang mungkin diduplikasi.
Lajur yang disenaraikan menggunakan COUNT(*) dalam senarai pilihan lajur.
Lajur yang disenaraikan dalam klausa GROUP BY.
Klausa HAVING menetapkan bilangan ulangan menjadi lebih daripada 1.
Tapis data pendua
Jika anda perlu membaca data unik, anda boleh menggunakan kata kunci DISTINCT dalam pernyataan SELECT untuk menapis data pendua.
mysql> SELECT DISTINCT last_name, first_name -> FROM person_tbl -> ORDER BY last_name;Anda juga boleh menggunakan GROUP BY untuk membaca data unik dalam jadual data:
mysql> SELECT last_name, first_name -> FROM person_tbl -> GROUP BY (last_name, first_name)
Padam data pendua
Jika anda ingin memadamkan data pendua dalam jadual data, anda boleh 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;Sudah tentu, anda juga boleh menambahnya dalam jadual data INDEX (indeks) dan PRIMAY KEY (primary key) cara mudah ini untuk memadam rekod pendua dalam jadual. Kaedahnya adalah seperti berikut:
mysql> ALTER IGNORE TABLE person_tbl -> ADD PRIMARY KEY (last_name, first_name);
Tutorial video berkaitan yang disyorkan: