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

ลบหลายแถวใน MySQL ด้วย IN Clause ระบุหลาย ID


ไวยากรณ์ DELETE ด้วย IN

ใช้ IN (value1, value2, ...) เพื่อลบหลายแถวในคำสั่งเดียว:

DELETE FROM your_table
WHERE id_column IN (value1, value2, value3, ...);

ตัวอย่างการใช้งาน

สร้างตารางและข้อมูล 6 แถว

CREATE TABLE DeleteManyRows (Id INT, Name VARCHAR(200), Age INT);
INSERT INTO DeleteManyRows VALUES
(1, 'John', 23), (2, 'Johnson', 22), (3, 'Sam', 20),
(4, 'David', 26), (5, 'Carol', 21), (6, 'Smith', 29);

ข้อมูลก่อนลบ

+------+---------+------+
| Id   | Name    | Age  |
+------+---------+------+
| 1    | John    | 23   |
| 2    | Johnson | 22   |
| 3    | Sam     | 20   |
| 4    | David   | 26   |
| 5    | Carol   | 21   |
| 6    | Smith   | 29   |
+------+---------+------+

ลบ ID 1,2,3,4 พร้อมกัน

DELETE FROM DeleteManyRows WHERE Id IN (1, 2, 3, 4);

ผลลัพธ์เหลือ ID 5,6

+------+-------+------+
| Id   | Name  | Age  |
+------+-------+------+
| 5    | Carol | 21   |
| 6    | Smith | 29   |
+------+-------+------+

เคล็ดลับและ Best Practices

ใช้ Subquery แทนรายการค่า (Dynamic)

DELETE FROM orders
WHERE customer_id IN (SELECT id FROM customers WHERE status = 'inactive');

จำนวนค่าใน IN Clause

  • MySQL ไม่มีข้อจำกัดจำนวนค่าใน IN() โดยตรง
  • แต่มีข้อจำกัด max_allowed_packet (ค่าเริ่มต้น 4MB/64MB)
  • หากมี ID มากกว่า 1000+ ควรใช้ JOIN หรือ Temporary Table

ใช้ JOIN สำหรับการลบขนาดใหญ่

DELETE d FROM DeleteManyRows d
JOIN (SELECT 1 AS id UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) ids
  ON d.Id = ids.id;

ตรวจสอบก่อนลบ (Safe Preview)

SELECT * FROM DeleteManyRows WHERE Id IN (1, 2, 3, 4);
-- ตรวจสอบข้อมูลก่อน แล้วค่อยรัน DELETE

หมายเหตุ: DELETE จะยิง ON DELETE TRIGGER และสามารถ Rollback ได้ (ใน Transaction) ต่างจาก TRUNCATE