Xóa bản ghi với nhiều điều kiện (AND) trong MySQL
Sử dụng mệnh đề WHERE với toán tử AND để chỉ định nhiều điều kiện cùng lúc khi xóa bản ghi.
Ví dụ minh họa
Tạo bảng DemoTable722:
mysql> CREATE TABLE DemoTable722 (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentName VARCHAR(100),
StudentAge INT
);
Query OK, 0 rows affected (1.84 sec)
Chèn dữ liệu:
mysql> INSERT INTO DemoTable722(StudentName,StudentAge) VALUES('Chris Brown',23);
Query OK, 1 row affected (0.24 sec)
mysql> INSERT INTO DemoTable722(StudentName,StudentAge) VALUES('John Smith',21);
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable722(StudentName,StudentAge) VALUES('David Miller',22);
Query OK, 1 row affected (0.17 sec)
mysql> INSERT INTO DemoTable722(StudentName,StudentAge) VALUES('Adam Smith',20);
Query OK, 1 row affected (0.24 sec)
mysql> INSERT INTO DemoTable722(StudentName,StudentAge) VALUES('Carol Taylor',24);
Query OK, 1 row affected (0.39 sec)
Xem dữ liệu:
mysql> SELECT * FROM DemoTable722;
+-----------+--------------+------------+ | StudentId | StudentName | StudentAge | +-----------+--------------+------------+ | 1 | Chris Brown | 23 | | 2 | John Smith | 21 | | 3 | David Miller | 22 | | 4 | Adam Smith | 20 | | 5 | Carol Taylor | 24 | +-----------+------------+------------+ 5 rows in set (0.00 sec)
Xóa bản ghi thỏa mãn CẢ HAI điều kiện: StudentId=3 VÀ StudentName='David Miller':
mysql> DELETE FROM DemoTable722 WHERE StudentId = 3 AND StudentName = 'David Miller'; Query OK, 1 row affected (0.21 sec)
Kiểm tra lại (bản ghi David Miller đã bị xóa):
mysql> SELECT * FROM DemoTable722;
+-----------+--------------+------------+ | StudentId | StudentName | StudentAge | +-----------+--------------+------------+ | 1 | Chris Brown | 23 | | 2 | John Smith | 21 | | 4 | Adam Smith | 20 | | 5 | Carol Taylor | 24 | +-----------+--------------+------------+ 4 rows in set (0.00 sec)
Các biến thể hữu ích
| Yêu cầu | Cú pháp |
|---|---|
| Xóa theo nhiều giá trị của cùng cột | WHERE Id IN (1,2,3) |
| Xóa theo khoảng giá trị | WHERE Age BETWEEN 20 AND 25 |
| Xóa với subquery | WHERE Id IN (SELECT Id FROM other_table WHERE ...) |
| Xóa tất cả trừ một vài | WHERE Id NOT IN (1,2) |
| Xóa với JOIN (bảng liên quan) | DELETE t1 FROM t1 JOIN t2 ON ... WHERE ... |
⚠️ Cảnh quan trọng
- Luôn chạy SELECT trước DELETE để xác nhận bản ghi sẽ bị xóa:
SELECT * FROM table WHERE ... - Không có UNDO sau DELETE (trừ khi trong transaction chưa COMMIT)
- Cân nhắc
SOFT DELETE(cộtdeleted_at,is_deleted) thay vì xóa vật lý - Foreign Key: nếu bảng khác tham chiếu, cần cấu hình
ON DELETE CASCADEhoặc xóa bảng con trước