Bagaimanakah pertanyaan MySQL mengendalikan data pendua?Tapis untuk mengalih keluar pernyataan data pendua

MySQLBagaimanakah pertanyaan mengendalikan data pendua?Tapis untuk mengalih keluar pernyataan data pendua

MySQL Mengendalikan data pendua

Mungkin terdapat rekod pendua dalam beberapa jadual data MySQL. Dalam sesetengah kes, kami membenarkan kewujudan data pendua, tetapi kadangkala kami juga perlu memadamkan data pendua ini.

Dalam bab ini, kami akan memperkenalkan cara menghalang data pendua dalam jadual data dan cara memadam data pendua dalam jadual data.


Cegah data pendua dalam jadual

Anda boleh menetapkan medan yang ditentukan dalam jadual data MySQL sebagai KUNCI UTAMA atau UNIK (unik) Indeks untuk memastikan keunikan data.

Mari cuba contoh: Tiada indeks dan kunci utama dalam jadual di bawah, 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 berganda untuk menetapkan keunikan data. Jika anda menetapkan kunci primer berganda, nilai lalai kunci itu tidak boleh NULL, tetapi boleh ditetapkan kepada NOT NULL.Seperti 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 yang unik, maka apabila memasukkan data pendua, pernyataan SQL akan gagal untuk dilaksanakan dengan jayanya dan menimbulkan ralat.

Perbezaan antara INSERT IGNORE INTO dan INSERT INTO ialah INSERT IGNORE mengabaikan data yang telah wujud dalam pangkalan data. Jika tiada data dalam pangkalan data, ia akan memasukkan data baru, dan jika ada data, ia akan melangkau data ini.Dengan cara ini, data sedia ada dalam pangkalan data boleh dipelihara, dan tujuan memasukkan data dalam jurang dapat dicapai.

Contoh berikut menggunakan INSERT IGNORE INTO, yang dilaksanakan tanpa ralat dan tidak memasukkan data pendua 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 IGNORE INTO Apabila memasukkan data, selepas keunikan rekod ditetapkan, jika data pendua dimasukkan, tiada ralat akan dikembalikan, tetapi hanya amaran akan dikembalikan.Dan GANTIKAN KE dalam jika terdapat rekod utama atau unik, padamkannya dahulu.Masukkan rekod baharu.

Satu lagi cara 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)
);

Data pendua statistik

Di bawah ini kita 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 menanyakan nilai pendua, lakukan perkara berikut:

  • Tentukan lajur yang mengandungi kemungkinan nilai pendua.
  • Gunakan COUNT(*) dalam senarai pilih lajur untuk menyenaraikan lajur tersebut.
  • Lajur yang disenaraikan dalam klausa GROUP BY.
  • Klausa HAVING menetapkan bilangan ulangan 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;

Anda juga boleh menggunakan GROUP BY untuk membaca data unik daripada jadual:

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

nyahpendua data

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, sex);
mysql> DROP TABLE person_tbl;
mysql> ALTER TABLE tmp RENAME TO person_tbl;

Sudah tentu, anda juga boleh menambah INDEX (indeks) dan PRIMAY KEY (primary key) dalam jadual data untuk memadamkan rekod pendua dalam jadual.Kaedah seperti di bawah:

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

Blog Harapan Chen Weiliang ( https://www.chenweiliang.com/ ) berkongsi "Bagaimanakah MySQL membuat pertanyaan dan mengendalikan data pendua?Penyata Penapisan dan Penyahduplikasian" akan membantu anda.

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

Selamat datang ke saluran Telegram blog Chen Weiliang untuk mendapatkan kemas kini terkini!

🔔 Jadilah yang pertama untuk mendapatkan "Panduan Penggunaan Alat AI Pemasaran Kandungan ChatGPT" yang berharga dalam direktori teratas saluran! 🌟
📚 Panduan ini mengandungi nilai yang besar, 🌟Ini adalah peluang yang jarang berlaku, jangan lepaskan! ⏰⌛💨
Share dan like jika anda suka!
Perkongsian dan suka anda adalah motivasi berterusan kami!

 

发表 评论

Alamat e-mel anda tidak akan diterbitkan. 必填 项 已 用 * 标注

tatal ke atas