เมื่อต้องการลบข้อมูลหลายแถวที่ระบุ 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 ตารางนานเกินไป