Cú pháp DELETE cơ bản
DELETE FROM ten_bang
WHERE dieu_kien;
Ví dụ
Tạo bảng:
CREATE TABLE DemoTable615 (
EmployeeId VARCHAR(100),
EmployeeName VARCHAR(100)
);
INSERT INTO DemoTable615 VALUES
('EMP-101', 'Adam'),
('EMP-1001', 'David'),
('EMP-1002', 'Chris'),
('EMP-1003', 'Robert');
Xóa nhân viên có ID = 'EMP-1002':
DELETE FROM DemoTable615
WHERE EmployeeId = 'EMP-1002';
Kết quả: 1 row affected. Bảng còn 3 dòng.
Các biến thể DELETE
| Loại | Cú pháp | Mô tả |
|---|---|---|
| Xóa 1 dòng | DELETE FROM t WHERE id = 1 | Khóa chính duy nhất |
| Xóa nhiều dòng | DELETE FROM t WHERE status = 'inactive' | Cẩn thận với WHERE |
| Xóa tất cả | DELETE FROM t hoặc TRUNCATE TABLE t | TRUNCATE nhanh hơn, reset auto_increment |
| Xóa với JOIN | DELETE t1 FROM t1 JOIN t2 ON ... WHERE ... | Xóa dựa trên bảng khác |
| Xóa có LIMIT | DELETE FROM t WHERE ... LIMIT 100 | Batch delete tránh lock lâu |
Lưu ý an toàn
- Luôn test SELECT trước:
SELECT * FROM DemoTable615 WHERE EmployeeId = 'EMP-1002'. - Sử dụng
TRANSACTIONcho phép rollback:START TRANSACTION; DELETE ...; ROLLBACK;/COMMIT;. - Foreign Key: Nếu bảng khác tham chiếu, cần
ON DELETE CASCADEhoặc xóa bảng con trước. DELETEkhông reset AUTO_INCREMENT,TRUNCATEthì reset.
Hiệu năng
- Index trên cột WHERE → nhanh.
- Xóa lượng lớn: Chia batch (LIMIT 1000) + sleep giữa các batch để tránh lock table lâu.
- Partitioning:
DROP PARTITIONtức thì cho dữ liệu cũ.