Câu lệnh DELETE
trong MySQL được sử dụng để xóa dữ liệu từ một bảng. Dưới đây là hướng dẫn chi tiết từ các trường hợp cơ bản đến nâng cao, với các ví dụ cụ thể và minh họa rõ ràng.
DELETE
Cú pháp cơ bản của câu lệnh DELETE
là:
table_name
Câu lệnh trên sẽ xóa dòng có employee_id = 1
khỏi bảng employees
.
Bạn có thể xóa nhiều bản ghi cùng một lúc bằng cách sử dụng điều kiện WHERE
.
Để xóa tất cả các bản ghi trong bảng employees
với department_id = 2
:
department_id = 2
Câu lệnh trên sẽ xóa tất cả các dòng trong bảng employees
, nhưng cấu trúc bảng và các ràng buộc sẽ được giữ nguyên.
Bạn có thể xóa dữ liệu dựa trên kết quả của một truy vấn con.
Để xóa các bản ghi trong bảng employees
mà employee_id
không xuất hiện trong bảng salaries
:
employees
Câu lệnh trên sẽ xóa các nhân viên thuộc phòng ban đã bị xóa khỏi bảng departments
.
Bạn có thể sử dụng các điều kiện phức tạp trong phần WHERE
của câu lệnh DELETE
.
Để xóa các bản ghi trong bảng orders
mà order_date
nằm ngoài khoảng thời gian của tháng hiện tại và có status = 'canceled'
:
LIMIT
Câu lệnh trên sẽ xóa 5 bản ghi đầu tiên trong bảng users
mà có status = 'inactive'
.
ORDER BY
Sử dụng ORDER BY
cùng với LIMIT
để kiểm soát các bản ghi cụ thể cần xóa theo thứ tự.
Để xóa 10 bản ghi có created_at
cũ nhất trong bảng logs
:
created_at
Trigger này sẽ xóa bản ghi trong bảng archive
khi bản ghi tương ứng trong bảng main
bị xóa.
AUTO_INCREMENT
)Khi bạn xóa các bản ghi trong bảng có khóa chính tự động tăng, giá trị tự động tăng không bị thay đổi. Nếu bạn muốn đặt lại giá trị AUTO_INCREMENT
về một giá trị cụ thể, bạn phải sử dụng ALTER TABLE
.
Để đặt lại giá trị AUTO_INCREMENT
cho bảng products
:
AUTO_INCREMENT
Câu lệnh trên sẽ xóa trường notifications
khỏi đối tượng JSON trong cột preferences
cho người dùng có user_id = 1
.
Nếu bảng của bạn được phân vùng, bạn có thể xóa dữ liệu từ một phân vùng cụ thể.
Giả sử bạn có bảng sales
được phân vùng theo tháng, và bạn muốn xóa dữ liệu từ phân vùng tháng 01 của năm 2024:
p202401
Câu lệnh trên sẽ xóa tất cả các đơn hàng và khách hàng có customer_id = 10
.
IGNORE
Sử dụng từ khóa IGNORE
để bỏ qua các lỗi khi thực hiện câu lệnh DELETE
.
DELETE IGNORE FROM employees WHERE employee_id = 999;
Câu lệnh trên sẽ xóa bản ghi với employee_id = 999
, và nếu có lỗi xảy ra (ví dụ, không tìm thấy bản ghi), câu lệnh sẽ bỏ qua lỗi đó.
Trên đây là hướng dẫn chi tiết về câu lệnh DELETE
trong MySQL với các trường hợp từ cơ bản đến nâng cao. Các ví dụ và kỹ thuật này giúp bạn hiểu rõ hơn cách xóa dữ liệu hiệu quả và an toàn trong MySQL.