Bài MySQL 33: ON DELETE CASCADE trong MySQL

0
321

Xin chào các bạn, trong bài học ngày hôm nay mình sẽ hướng dẫn các bạn sử dụng tham chiếu ON DELETE CASCADE cho khóa ngoại để xóa dữ liệu khỏi nhiều bảng có liên quan.

Giới thiệu

Trong các bài học trước trước, các bạn đã học cách xóa dữ liệu từ nhiều bảng có liên quan bằng cách sử dụng câu lệnh DELETE. Tuy nhiên, MySQL cung cấp một cách hiệu quả hơn được gọi là hành động tham chiếu ON DELETE CASCADE cho khóa ngoại cho phép bạn xóa dữ liệu từ các bảng con khi bạn xóa dữ liệu khỏi bảng cha.

Ví dụ về ON DELETE CASCADE

Chúng ta hãy xem một ví dụ về việc sử dụng ON DELETE CASCADE.

Giả sử chúng ta có hai bảng: buildingsrooms. Trong mô hình cơ sở dữ liệu này, mỗi tòa nhà có một hoặc nhiều phòng. Tuy nhiên, mỗi phòng chỉ thuộc về một tòa nhà duy nhất. Một căn phòng sẽ không tồn tại nếu không có tòa nhà.

Mối quan hệ giữa tòa nhà và các phòng là quan hệ một nhiều (1: N) như trong sơ đồ cơ sở dữ liệu sau:

Khi chúng ta xóa một hàng khỏi bảng buildings, chúng ta cũng muốn xóa các hàng trong bảng rooms tham chiếu đến các hàng trong bảng tòa nhà. Ví dụ: khi chúng ta xóa một hàng với chỉ số building_no = 2, truy vấn như sau:

Chúng ta muốn các hàng trong bảng rooms ở trong tòa nhà số 2 cũng sẽ bị xóa, các bạn thực hiện theo các bước sau:

Bước 1: Tạo bảng buildings

Bước 2: Tạo bảng rooms

Lưu ý rằng chúng ta thêm mệnh đề ON DELETE CASCADE ở cuối để xác định khóa ngoại.

Bước 3: Thêm dữ liệu vào bảng buildings

Bước 4: Truy vấn dữ liệu từ bảng buildings

Bước 5: Thêm dữ liệu vào bảng rooms

Bước 6: Truy vấn dữ liệu từ bảng rooms

Bước 7: Xóa tòa nhà với building_no = 2

Bước 8: Truy vấn dữ liệu từ bảng rooms

Như bạn có thể thấy tất cả các hàng tham chiếu đến building_no = 2 đã bị xóa.

Lưu ý rằng ON DELETE CASCADE chỉ hoạt động với các bảng có công cụ lưu trữ hỗ trợ  khóa ngoại, ví dụ: InnoDB. Một số loại bảng không hỗ trợ các khóa ngoại như MyISAM, do đó bạn nên chọn các công cụ lưu trữ thích hợp cho các bảng mà bạn dự định sử dụng hành động tham chiếu ON DELETE CASCADE.

Kết luận

Như vậy trong bài học ngày hôm nay mình đã hướng dẫn các bạn sử dụng ON DELETE CASCADE cho khóa ngoại để xóa dữ liệu khỏi nhiều bảng có liên quan. Trong bài học tiếp theo chúng ta sẽ tìm hiểu về lệnh REPLACE trong MySQL.

Chúc các bạn học tập tốt!

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây