Giới thiệu
Dùng DELETE ... WHERE column LIKE pattern để xóa các dòng có chuỗi khớp mẫu (pattern matching) với ký tự đại diện % (bất kỳ chuỗi) và _ (một ký tự).
Ví dụ minh họa
Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name VARCHAR(100)
);
mysql> INSERT INTO DemoTable (Name) VALUES
('John Smith'), ('Carol Taylor'), ('John Doe'), ('Chris Brown'), ('John Brown');
Xem dữ liệu trước
mysql> SELECT * FROM DemoTable;
+----+--------------+ | Id | Name | +----+--------------+ | 1 | John Smith | | 2 | Carol Taylor | | 3 | John Doe | | 4 | Chris Brown | | 5 | John Brown | +----+--------------+
Xóa các tên chứa 'ohn' (John, Johnson...)
mysql> DELETE FROM DemoTable WHERE Name LIKE '%ohn%';
Query OK, 3 rows affected (0.16 sec)
Kết quả sau xóa
mysql> SELECT * FROM DemoTable;
+----+--------------+ | Id | Name | +----+--------------+ | 2 | Carol Taylor | | 4 | Chris Brown | +----+--------------+
Các mẫu LIKE phổ biến
| Mẫu | Ý nghĩa | Ví dụ khớp |
|---|---|---|
%ohn% | Chứa 'ohn' ở bất kỳ đâu | John, Johnson, Johns |
John% | Bắt đầu bằng 'John' | John, Johnny, John Smith |
%Smith | Kết thúc bằng 'Smith' | John Smith, Smith |
J_hn | 4 ký tự, bắt đầu J, kết thúc hn | John, Joon |
%[aeiou]% | Chứa nguyên âm (cần REGEXP) | - |
⚠️ Cảnh báo
- Không có UNDO: DELETE vĩnh viễn. Luôn chạy SELECT trước để kiểm tra.
- Hiệu năng: LIKE '%...%' không dùng index (full table scan).
- NULL: LIKE không khớp NULL. Dòng NULL không bị xóa.
An toàn hơn: Soft Delete
ALTER TABLE DemoTable ADD COLUMN deleted BOOLEAN DEFAULT FALSE; UPDATE DemoTable SET deleted = TRUE WHERE Name LIKE '%ohn%';