Foreign Key với Cascade Delete trong SQL Server

Cascade SQL Server là gì? On delete cascade trong SQL Server được sử dụng thế nào? Nội dung bài viết hướng dẫn cách sử dụng Foreign Key với Cascade Delete trong SQL Server cùng cú pháp và các ví dụ. Hãy cùng Quantrimang.com tìm hiểu nhé!

Khóa ngoại với Cascade DELETE trong SQL Server là gì?

Khóa ngoại với Cascade Delete tức thị nếu một bản ghi trong bảng mẹ bị xóa thì bản ghi tương ứng trong bảng con cũng sẽ tự động hóa bị xóa.

Khóa ngoại với ràng buộc tự động hóa xóa được tạo bằng phương pháp dùng lệnh CREATE TABLE hoặc ALTER TABLE.

Tạo khóa ngoại với ràng buộc tự động hóa xóa bằng lệnh CREATE TABLE

Cú pháp

CREATE TABLE bang_con( cot1 kieudulieu [ NULL | NOT NULL ], cot2 kieudulieu [ NULL | NOT NULL ], … CONSTRAINT fk_ten FOREIGN KEY (cot_con1, cot_con2, … cot_con_n) REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n) ON DELETE CASCADE [ ON UPDATE SET NULL ]);

bang_con

Tên của bảng con muốn tạo.

cot1, cot2

Cột muốn tạo trong bảng. Mỗi cột có một loại tài liệu, phải được chỉ định là chứa giá trị NULL hay NOT NULL, nếu không sẽ mặc định là NULL.

Các kiểu tài liệu trong SQL Server

fk_ten

Tên của ràng buộc khóa ngoại muốn tạo.

cot_con1, cot_con2, … cot_con_n

Cột trong bang_con muốn tham chiếu tới khóa chính trong bang_me.

bang_me

Tên của bảng mẹ chứa khóa chính được sử dụng trong bang_con.

cot_me1, cot_me2, … cot_me_n

Cột tạo nên khóa chính trong bang_me. Khóa ngoại sẽ tạo ràng buộc giữa tài liệu và các cột cot_con1, cot_con2, … cot_con_n trong bang_con.

ON DELETE CASCADE

Chỉ định tài liệu con sẽ bị xóa khi tài liệu mẹ bị xóa.

ON UPDATE

Tùy chọn. Đã cho chúng ta biết sẽ làm gì với tài liệu con khi tài liệu mẹ được update. Có những lựa chọn NO ACTION, CASCADE, SET NULL và SET DEFAULT.

NO ACTION

Dùng với ON DELETE hoặc ON UPDATE, tức thị không làm gì với tài liệu con khi tài liệu mẹ bị xóa hoặc update.

CASCADE

Dùng với ON DELETE hoặc ON UPDATE, tức thị tài liệu con bị xóa hoặc update khi tài liệu mẹ bị xóa hoặc update.

SET NULL

Dùng với ON DELETE hoặc ON UPDATE, tức thị tài liệu con được đặt là NULL khi tài liệu mẹ bị xóa hoặc update.

SET DEFAULT

Dùng với ON DELETE hoặc ON UPDATE, tức thị tài liệu con được đặt thành giá trị mặc định khi tài liệu mẹ bị xóa hoặc update.

Ví dụ

CREATE TABLE sanpham( id_sanpham INT PRIMARY KEY, ten_sanpham VARCHAR(50) NOT NULL, phan_loai VARCHAR(25));CREATE TABLE hangtonkho( id_hangtonkho INT PRIMARY KEY, id_sanpham INT NOT NULL, soluong INT, luong_toithieu INT, luong_toida INT, CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham) REFERENCES sanpham (id_sanpham) ON DELETE CASCADE );

Ở ví dụ này, tất cả chúng ta tạo ra bảng mẹ là sanpham với khóa chính gồm trường thông tin là id_sanpham. Sau đó là bảng con mang tên hangtonkho với khóa ngoại có ràng buộc xóa. Lệnh CREATE TABLE tạo khóa ngoại trên bảng hangtonkho mang tên fk_htk_id_sanpham. Khóa ngoại hình thành quan hệ giữa cột id_sanpham trong bảng hangtonkho và id_sanpham trong bảng sanpham.

Khóa ngoại này được chỉ định ON DELETE CASCADE nói cho SQL Server biết rằng phải xóa bản ghi tương ứng trong bảng con khi tài liệu ở bảng mẹ bị xóa. Ở ví dụ này, giá trị id_sanpham bị xóa khỏi bảng sanpham thì bản ghi tương ứng trong bảng con hangtonkho dùng id_sanpham này cũng sẽ bị xóa.

Tạo khóa ngoại với ràng buộc xóa bằng lệnh ALTER TABLE

Cú pháp

ALTER TABLE bang_conADD CONSTRAINT fk_ten FOREIGN KEY (cot_con1, cot_con2, … cot_con_n) REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n)ON DELETE CASCADE;

bang_con

Tên của bảng con muốn tạo.

fk_ten

Tên của ràng buộc khóa ngoại muốn tạo.

cot_con1, cot_con2, … cot_con_n

Cột trong bang_con muốn tham chiếu tới khóa chính trong bang_me.

bang_me

Tên của bảng mẹ chứa khóa chính được sử dụng trong bang_con.

cot_me1, cot_me2, … cot_me_n

Cột tạo nên khóa chính trong bang_me. Khóa ngoại sẽ tạo ràng buộc giữa tài liệu và các cột cot_con1, cot_con2, … cot_con_n trong bang_con.

ON DELETE CASCADE

Giới hạn ON DELETE CASCADE được sử dụng trong SQL Server để tự động hóa xóa các hàng từ bảng con, khi hàng từ bảng cha được xóa. Ví dụ khi học trò đăng ký một nền tảng học trực tuyến, sau đó tất cả thông tin cụ thể của học trò này đều sẽ tiến hành ghi lại cùng với số/ID riêng. Toàn bộ khóa học trong các nền tảng học trực tuyến đều phải có code, tiêu đề và tên riêng. Học trò/sinh viên có thể tham gia khóa học bất kỳ như ý muốn.

Không có quy định học trò phải tham gia toàn bộ khóa học hay phải vào khóa học nào đó trong cùng một ngày. Một học trò có thể tham gia vào trong 1 hoặc nhiều khóa học hơn. Giả sử bạn xóa một hàng từ bảng Student, song song muốn xóa tất cả hàng ở bảng Enroll mà tham chiếu tới hàng trong bảng Student. Lúc này, bạn phải tới ON DELETE CASCADE. Tiếp sau đây là một ví dụ minh họa cách dùng ON DELETE CASCADE trong SQL Server.

Ví dụ

ALTER TABLE hangtonkho Địa chỉ cửa hàng CONSTRAINT fk_htk_id_sanpham FOREIGN KEY (id_sanpham) REFERENCES sanpham (id_sanpham) ON DELETE CASCADE;

Trong ví dụ về khóa ngoại này, bảng con hangtonkho được tạo với khóa ngoại mang tên fk_htk_id_sanpham, tham chiếu tới bảng mẹ sanpham dựa trên id_sanpham.

Vì chỉ định ON DELETE CASCADE nên nếu giá trị id_sanpham bị xóa khỏi bảng mẹ thì bản ghi tuong ứng trong bảng con cũng sẽ bị xóa.

Bài trước: Khóa ngoại Foreign Key trong SQL Server

Bài sau: Khóa ngoại Foreign Key (Set Null) trong SQL Server

You May Also Like

About the Author: v1000