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.

1. Cấu trúc cơ bản của câu lệnh 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.

2. Xóa nhiều bản ghi dựa trên điều kiện

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.

Ví dụ:

Để 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.

4. Xóa dựa trên kết quả của một truy vấn con

Bạn có thể xóa dữ liệu dựa trên kết quả của một truy vấn con.

Ví dụ:

Để xóa các bản ghi trong bảng employeesemployee_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.

6. Xóa với điều kiện phức tạp

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.

Ví dụ:

Để xóa các bản ghi trong bảng ordersorder_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'.

8. Xóa dữ liệu với 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ự.

Ví dụ:

Để 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.

10. Xóa dữ liệu với khóa chính tự động tăng (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.

Ví dụ:

Để đặ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.

12. Xóa dữ liệu dựa trên phân vùng (Partitioning)

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ể.

Ví dụ:

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.

14. Xóa dữ liệu với IGNORE

Sử dụng từ khóa IGNORE để bỏ qua các lỗi khi thực hiện câu lệnh DELETE.

Ví dụ:

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.