Latest web development tutorials

MySQL จัดการข้อมูลที่ซ้ำกัน

อาจจะมีบาง MySQL ตารางข้อมูลระเบียนที่ซ้ำกันในบางกรณีเราอนุญาตให้ข้อมูลที่ซ้ำกัน แต่บางครั้งเราต้องลบข้อมูลที่ซ้ำกัน

บทนี้เราจะมาแนะนำวิธีการป้องกันการทำสำเนาข้อมูลของตารางข้อมูลและวิธีการลบข้อมูลที่ซ้ำกันในตารางข้อมูล


ป้องกันไม่ให้ข้อมูลที่ซ้ำกันในตารางจะปรากฏขึ้น

คุณสามารถตั้งค่าฟิลด์ที่ระบุใน 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 ซ้ำกันจำนวนของระเบียนในตาราง ภายใต้สถานการณ์ปกติค่าของคำสั่งซ้ำโปรดทำต่อไปนี้:

  • ตรวจสอบว่าคอลัมน์มีค่าที่อาจจะซ้ำแล้วซ้ำอีก
  • ในการเลือกใช้รายการคอลัมน์ COUNT (*) ที่ระบุไว้ในคอลัมน์
  • คอลัมน์จดทะเบียนในกลุ่มโดยข้อ
  • การมีข้อกำหนดจำนวนของการเกิดซ้ำมากกว่า 1

กรองข้อมูลที่ซ้ำกัน

หากคุณจำเป็นต้องอ่านข้อมูลที่ไม่ซ้ำกันสามารถใช้คำหลักที่แตกต่างกันในคำสั่ง 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);