Bài 18: Câu lệnh DELETE trong MySQL

Học Mysql 24/02/2017 07:00 2100
Trong bài viết này, bạn sẽ học được làm thế nào để sử dụng MySQL DELETE để xoá dữ liệu từ một hoặc nhiều bảng cơ sở dữ liệu.

Để xóa dữ liệu từ một bảng, bạn sử dụng câu lệnh MySQL DELETE. MySQL DELETE cho phép bạn loại bỏ những bản ghi từ một bảng duy nhất hoặc từ nhiều bảng.

1. Xóa dữ liệu từ một bảng.

Để xóa dữ liệu từ một bảng duy nhất, bạn sử dụng câu lệnh DELETE sau đây:

DELETE FROM [Tên_Bảng]   
[WHERE <Điều_Kiện>] [ORDER BY ...] [LIMIT rows]

Trong đó:

Đầu tiên bạn cần xác định một tên bảng sau mênh đề DELETE FROM để xóa dữ liệu tại bảng nào.

Mệnh đề WHERE sử dụng một điều kiện để xác định số bản ghi mà bạn muốn xóa. Nếu một bản ghi đáp ứng các điều kiện WHERE, nó sẽ bị xóa vĩnh viễn khỏi bảng. Nếu bạn không sử dụng mệnh đề WHERE, Mặc định tất cả các bản ghi trong bảng sẽ bị xóa.

Câu lệnh DELETE trả về số hàng bị xóa theo quy định của hàm ROW_COUNT().

Chúng ta sẽ sử dụng bảng employees trong CSDL mẫu để thực hiện một số ví dụ như sau.

Ví dụ: Xóa tất cả các bản ghi có officeCode=1

DELETE FROM employees 
WHERE officeCode = 1;

Để xóa tất cả các bản ghi từ bảng nhân viên, bạn sử dụng câu lệnh DELETE không có mệnh đề WHERE như sau:

DELETE FROM employees;

Ngay lập tức các bản ghi trong bảng employees sẽ bị xóa !

2. Xóa dữ liệu từ nhiều bảng.

Để xóa các bản ghi từ nhiều bảng, bạn sử dụng một trong các lệnh DELETE sau.

DELETE [Tên_Bảng_1],[Tên_Bảng_2],...
FROM [Bảng_Tham_Chiếu]   
[WHERE <Điều_Kiện>]
 
DELETE FROM [Tên_Bảng_1],[Tên_Bảng_2],...
USING [Bảng_Tham_Chiếu]
[WHERE <Điều_Kiện>]

Trong đó:

  • Cả hai lệnh DELETE đều cho phép xóa các bản ghi từ nhiều bảng.
  • Câu lênh DELETE đầu tiên sử dụng mệnh đề FROM trong khi lệnh còn lại sử dụng mệnh đề USING.
  • Mệnh đề WHERE được dùng để xác định số bản ghi được phép xóa.
  • Cẩ hai câu lệnh đều trả về số bản ghi đã xóa từ nhiều bảng.

Chú ý: Nếu bạn bỏ qua điều kiện trong mệnh đề WHERE thì mặc đinh các bản ghi trong các bảng đều bị xóa. Nếu điểu kiện chỉ được xác định cho một bảng hoặc một nhóm bảng có quan hệ thì các bảng còn lại được hiểu là không có điều kiện sẽ bị xóa hết.

Ví dụ: Xóa toàn bộ dữ liệu trong hai bảng customerssuppliers

DELETE suppliers, 
    customers
FROM suppliers, 
 customers

Sau khi thực hiện lệnh thì toàn bộ dữ liệu trong hai bảng sẽ bị xóa hết !

Ví dụ: Xóa các bản ghi trong hai bảng riêng bảng khách hàng phải phù hợp với điều kiện khách hàng này tới từ USA.

DELETE suppliers, 
    customers
FROM suppliers, 
 customers
WHERE customers.country='USA'

Sau khi thực hiện lệnh thì dữ liệu trong bảng customers chỉ xóa các bản ghi có country='USA' trong khi đó các bản ghi trong bảng suppliers sẽ bị xóa hết.

Tiếp tục ta sẽ thêm một cột country cho bảng suppliers để lưu trữ dữ liệu quốc gia của Nhà cung cấp.

ALTER TABLE suppliers 
ADD COLUMN country CHAR(255) NOT NULL

Đồng thời ta sẽ thêm hai nhà cung cấp khác tới từ USA.

INSERT INTO suppliers(name,phone,address,email,country) 
VALUES ('HostGator','(866) 964 - 2867','Houston, TX 77092 United States of America','sale1@hostgator.com','USA')

Ví dụ: Xóa các khách hàng và Nhà cung cấp tới từ USA.

DELETE suppliers, 
    customers
FROM suppliers, 
 customers
WHERE customers.country='USA' AND suppliers.country='USA'

Chúng ta hãy xem sét hai bảng sau officcesemployees.

Yêu cầu: Mỗi khi tôi xóa bỏ một văn phòng thì đồng thời tôi sẽ xóa hết các nhân viên đã làm việc tại văn phòng đó.

Ví dụ: Tôi muốn xóa văn phòng trong bảng officesofficeCode=1 và tất cả các nhân viên trong bảng employeesofficeCode=1.

DELETE employees, 
    offices 
FROM employees, 
 offices 
WHERE employees.officeCode = offices.officeCode  AND 
      offices.officeCode = 1

P/s: Trong trường hợp này tôi cần một dàng buộc đảm bảo tính toàn vẹn dữ liệu employees.officeCode = offices.officeCode dựa vào điều kiện này MySQL chỉ xóa những cái gì thỏa mãn với điều kiện mà thôi.

3. Tổng kết

Chúng ta đã được học câu lênh SELECT, INSERT, UPDATE và hôm nay chúng ta đã được học DELETE một trong 4 thành phần quan trọng bậc nhất trong MySQL. Hy vọng với các bài viết này sẽ giúp các bạn dễ dàng thao tác và quản lý MySQL hiệu quả.

Xem Thêm

Profile photo of adminTheHalfHeart

B.V.T

Sinh ra và lớn nên ở Bắc Giang. Hiện tại thì tôi đang là một lập trình viên tại VietISO. Tôi lập website này với mục đích là bookmark những gì tôi đã đọc qua và mong muốn chia sẻ những gì tôi biết.