Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Xóa nhiều bản ghi MySQL với IN() trong một truy vấn

Vấn đề: Xóa nhiều hàng theo danh sách ID

Cần xóa các hàng có StudentId là 1, 2, 3, 4 trong một câu lệnh.

Giải pháp: DELETE với mệnh đề IN()

Cú pháp: DELETE FROM table WHERE column IN (value1, value2, ...);

1. Tạo bảng và dữ liệu

CREATE TABLE DemoTable (
    StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentName VARCHAR(20)
);

INSERT INTO DemoTable (StudentName) VALUES
('Chris'), ('Robert'), ('David'), ('Mike');

2. Dữ liệu trước khi xóa

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|         1 | Chris       |
|         2 | Robert      |
|         3 | David       |
|         4 | Mike        |
+-----------+-------------+

3. Xóa hàng ID 1,2,3,4

DELETE FROM DemoTable WHERE StudentId IN (1, 2, 3, 4);

4. Kết quả: Bảng trống

Empty set (0.00 sec)

Lưu ý

  • IN() chấp nhận danh sách giá trị, subquery, hoặc biểu thức.
  • Với danh sách lớn (>1000 giá trị), cân nhắc dùng bảng tạm hoặc JOIN để tránh giới hạn độ dài câu lệnh.
  • Luôn kiểm tra bằng SELECT * FROM table WHERE id IN (...) trước khi xóa.
  • Sử dụng transaction: START TRANSACTION; DELETE ...; COMMIT; (hoặc ROLLBACK nếu sai).

Mở rộng: Xóa dựa trên subquery

DELETE FROM DemoTable 
WHERE StudentId IN (SELECT Id FROM AnotherTable WHERE Condition);