บทช่วยสอน MySQL จัดการข้อมูลที่ซ้ำกัน ที่ดีที่สุดในปี 2024 ในบทช่วยสอนนี้ คุณสามารถเรียนรู้ ป้องกันไม่ให้ข้อมูลที่ซ้ำกันในตารางจะปรากฏขึ้น,สถิติข้อมูลที่ซ้ำกัน,กรองข้อมูลที่ซ้ำกัน,การขจัดข้อมูลซ้ำซ้อน,
อาจจะมีบาง MySQL ตารางข้อมูลระเบียนที่ซ้ำกันในบางกรณีเราอนุญาตให้ข้อมูลที่ซ้ำกัน แต่บางครั้งเราต้องลบข้อมูลที่ซ้ำกัน
บทนี้เราจะมาแนะนำวิธีการป้องกันการทำสำเนาข้อมูลของตารางข้อมูลและวิธีการลบข้อมูลที่ซ้ำกันในตารางข้อมูล
ลองตัวอย่าง: ใต้โต๊ะโดยไม่ต้องดัชนีและคีย์หลักเพื่อให้ตารางช่วยให้ระเบียนที่ซ้ำกันหลายปรากฏ
CREATE TABLE person_tbl ( first_name CHAR(20), last_name CHAR(20), sex CHAR(10) );
หากคุณต้องการที่จะกำหนดตารางเขต first_name ข้อมูล last_name ไม่สามารถทำซ้ำ, คุณสามารถตั้งค่าแบบ dual โหมดคีย์หลักในการกำหนดลักษณะเฉพาะของข้อมูลหากคุณตั้งค่าคีย์หลักคู่แล้วค่าเริ่มต้นของคีย์ที่ไม่สามารถโมฆะสามารถตั้งค่าให้ไม่เป็นโมฆะ ดังต่อไปนี้:
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) );
ถ้าเราตั้งค่าดัชนีที่ไม่ซ้ำกันจากนั้นใส่ข้อมูลที่ซ้ำกันคำสั่ง SQL จะไม่ได้รับการดำเนินการประสบความสำเร็จและโยนผิด
INSERT IGNORE INTO ความแตกต่างคือมี INSERT INTO INSERT ละเว้นเพิกเฉยต่อข้อมูลที่มีอยู่แล้วในฐานข้อมูลถ้าฐานข้อมูลไม่ได้มีข้อมูลที่ใส่ข้อมูลใหม่ถ้ามีข้อมูลแล้วข้ามข้อมูลนี้ เพื่อให้คุณสามารถเก็บข้อมูลที่มีอยู่แล้วในฐานข้อมูลเพื่อให้บรรลุวัตถุประสงค์ของข้อมูลลงในช่องว่าง
ตัวอย่างต่อไปนี้ใช้ INSERT IGNORE INTO ไม่สามารถไปอย่างผิดปกติหลังจากการดำเนินการก็จะไม่ใส่ซ้ำตารางข้อมูล:
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 เมื่อใส่ข้อมูลหลังจากการตั้งค่าความเป็นเอกลักษณ์ของการบันทึกถ้าคุณใส่ข้อมูลที่ซ้ำกันจะไม่กลับข้อผิดพลาดก็จะกลับเป็นเพียงการแจ้งเตือน แทนที่ INTO ลงในบันทึกเดียวกันถ้าปรากฏตัวหลักหรือที่ไม่ซ้ำกันเป็นครั้งแรกที่ถูกลบ แล้วใส่ระเบียนใหม่
ชุดของข้อมูลก็คือวิธีเดียวคือการเพิ่มดัชนีที่ไม่ซ้ำดังต่อไปนี้:
CREATE TABLE person_tbl ( first_name CHAR(20) NOT NULL, last_name CHAR(20) NOT NULL, sex CHAR(10) UNIQUE (last_name, first_name) );
ด้านล่างเราจะทำซ้ำบันทึกหมายเลขของตารางใน first_name และ last_name:
mysql> SELECT COUNT(*) as repetitions, last_name, first_name -> FROM person_tbl -> GROUP BY last_name, first_name -> HAVING repetitions > 1;
แบบสอบถามดังกล่าวข้างต้นจะกลับ person_tbl ซ้ำกันจำนวนของระเบียนในตาราง ภายใต้สถานการณ์ปกติค่าของคำสั่งซ้ำโปรดทำต่อไปนี้:
หากคุณจำเป็นต้องอ่านข้อมูลที่ไม่ซ้ำกันสามารถใช้คำหลักที่แตกต่างกันในคำสั่ง SELECT ในการกรองข้อมูลที่ซ้ำกัน
mysql> SELECT DISTINCT last_name, first_name -> FROM person_tbl -> ORDER BY last_name;
นอกจากนี้คุณยังสามารถใช้จำแนกตามกลุ่มที่จะอ่านข้อมูลในตารางไม่ได้ข้อมูลที่ซ้ำกัน:
mysql> SELECT last_name, first_name -> FROM person_tbl -> GROUP BY (last_name, first_name);
หากคุณต้องการที่จะลบข้อมูลที่ซ้ำกันในตารางข้อมูลคุณสามารถใช้คำสั่ง SQL ต่อไปนี้:
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;
แน่นอนคุณยังสามารถเพิ่มดัชนี (INDEX) และ PRIMAY คีย์ (คีย์หลัก) วิธีนี้ง่ายในตารางข้อมูลเพื่อลบระเบียนที่ซ้ำกันในตาราง นี่คือวิธี:
mysql> ALTER IGNORE TABLE person_tbl -> ADD PRIMARY KEY (last_name, first_name);