Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

การลบข้อมูลหลายแถวเฉพาะเจาะจงด้วย MySQL DELETE และ IN()

เมื่อต้องการลบข้อมูลหลายแถวที่ระบุ ID เฉพาะเจาะจง ใช้ DELETE ร่วมกับ IN()

สร้างตารางตัวอย่าง

mysql> create table DemoTable ( 
    ClientId varchar(40), 
    ClientName varchar(50) ); 
Query OK, 0 rows affected (0.62 sec)

เพิ่มข้อมูลตัวอย่าง

mysql> insert into DemoTable values('CLI-101','Chris'); Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('CLI-110','Adam'); Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('CLI-220','Mike'); Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('CLI-120','Bob'); Query OK, 1 row affected (0.53 sec)
mysql> insert into DemoTable values('CLI-240','Sam'); Query OK, 1 row affected (0.06 sec)

แสดงข้อมูลก่อนลบ

mysql> select *from DemoTable;
+----------+------------+
| ClientId | ClientName |
+----------+------------+
| CLI-101  | Chris      |
| CLI-110  | Adam       |
| CLI-220  | Mike       |
| CLI-120  | Bob        |
| CLI-240  | Sam        |
+----------+------------+
5 rows in set (0.00 sec)

คิวรี่ลบหลายแถวพร้อมกัน

mysql> delete from DemoTable where ClientId IN('CLI-101','CLI-220','CLI-240'); 
Query OK, 3 rows affected (0.10 sec)

ตรวจสอบข้อมูลหลังลบ

mysql> select *from DemoTable;
+----------+------------+
| ClientId | ClientName |
+----------+------------+
| CLI-110  | Adam       |
| CLI-120  | Bob        |
+----------+------------+
2 rows in set (0.00 sec)

ข้อดีของการใช้ IN()

  • สั้นกว่าและอ่านง่ายกว่า OR หลายตัว
  • ประสิทธิภาพดีกว่าในบางกรณี (Optimizer จัดการได้ดี)
  • รองรับ subquery ได้: WHERE id IN (SELECT id FROM other_table WHERE ...)

ข้อควรระวัง

  • ใช้ DELETE โดยไม่มี WHERE จะลบทุกแถว
  • ควรทดสอบด้วย SELECT ก่อนลบจริง
  • หากมี Foreign Key ต้องตรวจสอบ constraint (ON DELETE CASCADE/RESTRICT)

การลบจำนวนมาก (Batch Delete)

สำหรับการลบข้อมูลจำนวนมาก (หลายพัน/ล้านแถว) ควรลบทีละชุด (chunk) เพื่อไม่ให้ Lock ตารางนานเกินไป