Foreign Key với Cascade Delete trong SQL Server

Khái niệm “Cascade Delete” trong SQL Server là gì và cách sử dụng nó như thế nào? Bài viết này sẽ hướng dẫn cách sử dụng khóa ngoại với xóa rơi (cascade delete) trong SQL Server, bao gồm cú pháp và các ví dụ minh họa. Hãy cùng Quantrimang.com tìm hiểu nhé!

Khóa ngoại được sử dụng để thiết lập quan hệ liên kết giữa bảng con (cột được định nghĩa là khóa ngoại) và bảng cha (với khóa ngoại trở thành khóa chính). Ví dụ, nếu có bảng “ORDER” với khóa ngoại “TRANSACTION_ID”. Khóa ngoại này sẽ tham chiếu đến cột “TRANSACTION_ID” trong bảng “TRANSACTIONS”. Trong bảng “TRANSACTIONS”, “TRANSACTION_ID” sẽ là khóa chính. Trong trường hợp này, bảng “TRANSACTIONS” là bảng cha và bảng “ORDER” là bảng con.

Quy tắc “Cascade” của khóa ngoại cho biết khi một bản ghi bị xóa khỏi bảng cha, tất cả các bản ghi phụ thuộc (trong bảng con) cũng sẽ bị xóa. Ví dụ, nếu có một bản ghi trong bảng “TRANSACTION” với “TRANSACTION_ID” là ‘A2234’ (khóa chính). Nếu bản ghi này bị xóa khỏi bảng “TRANSACTIONS”, thì tất cả các bản ghi trong bảng “ORDER” có khóa ngoại “TRANSACTION_ID” là ‘A2234’ sẽ bị xóa. Chúng ta có thể thiết lập quy tắc “Cascade” như ví dụ dưới đây.

Có Thể Bạn Quan Tâm :   Attention Span - nâng cao hiệu suất, bí quyết thăng tiến sự nghiệp

CREATE TABLE ORDERS (ORDER_ID CHAR(15) NOT NULL, ORDER_DATE DATE, ORDER_TOTAL DECIMAL(9,2), TRANSACTION_ID CHAR(15), PRIMARY KEY(ORDER_ID), FOREIGN KEY(TRANSACTION_ID) REFERENCES TRANSACTIONS ON DELETE CASCADE) IN DB4ES01;

Từ khóa “REFERENCES” được theo sau bởi tên bảng cha và để đặt quy tắc “Cascade”, ta sử dụng từ khóa “ON DELETE CASCADE”.

Khóa Ngoại với Xóa Rơi (Cascade Delete) trong SQL Server là gì?

Đơn giản, khóa ngoại với xóa rơi nghĩa là nếu một bản ghi trong bảng cha bị xóa, thì bản ghi tương ứng trong bảng con cũng sẽ bị xóa tự động.

Khóa ngoại với ràng buộc xóa rơi có thể được tạo bằng lệnh CREATE TABLE hoặc ALTER TABLE.

Tạo Khóa Ngoại với Ràng Buộc Xóa Rơi bằng lệnh CREATE TABLE

Cú pháp

CREATE TABLE tên_bảng_con( cột1 kiểu_dữ_liệu [ NULL | NOT NULL ], cột2 kiểu_dữ_liệu [ NULL | NOT NULL ], … CONSTRAINT fk_tên FOREIGN KEY (cột_con1, cột_con2, … cột_con_n) REFERENCES tên_bảng_cha (cột_cha1, cột_cha2, … cột_cha_n) ON DELETE CASCADE [ ON UPDATE SET DEFAULT ]);

tên_bảng_con

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

cột1, cột2

Các cột muốn tạo trong bảng. Mỗi cột có kiểu dữ liệu và có thể được chỉ định là chứa giá trị NULL hoặc NOT NULL, nếu không chỉ định thì mặc định là NULL.

Có Thể Bạn Quan Tâm :   Năm, tháng, ngày, giờ, phút, giây, quý tiếng Anh là gì?

Các kiểu dữ liệu trong SQL Server

fk_tên

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

cột_con1, cột_con2, … cột_con_n

Các cột trong bảng con muốn tham chiếu tới khóa chính trong bảng cha.

tên_bảng_cha

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

cột_cha1, cột_cha2, … cột_cha_n

Các cột tạo nên khóa chính trong bảng cha. Ràng buộc khóa ngoại sẽ tạo liên kết dữ liệu giữa các cột cột_con1, cột_con2, … cột_con_n trong bảng con và bảng cha.

ON DELETE CASCADE

Chỉ định các bản ghi con sẽ bị xóa khi các bản ghi trong bảng cha bị xóa.

ON UPDATE

Tùy chọn. Xác định hành động nào sẽ được thực hiện với các bản ghi con khi bản ghi trong bảng cha được cập nhật. Có các tùy chọn NO ACTION, CASCADE, SET NULL và SET DEFAULT.

NO ACTION

Sử dụng với ON DELETE hoặc ON UPDATE, nghĩa là không thực hiện hành động gì với các bản ghi con khi bản ghi trong bảng cha bị xóa hoặc cập nhật.

Có Thể Bạn Quan Tâm :   Cộng hòa xã hội chủ nghĩa Việt Nam bằng tiếng Anh

CASCADE

Sử dụng với ON DELETE hoặc ON UPDATE, nghĩa là các bản ghi con bị xóa hoặc cập nhật khi bản ghi trong bảng cha bị xóa hoặc cập nhật.

SET NULL

Sử dụng với ON DELETE hoặc ON UPDATE, nghĩa là các bản ghi con được đặt thành giá trị NULL khi bản ghi trong bảng cha bị xóa hoặc cập nhật.

SET DEFAULT

Sử dụng với ON DELETE hoặc ON UPDATE, nghĩa là các bản ghi con được đặt thành giá trị mặc định khi bản ghi trong bảng cha bị xóa hoặc cập nhật.

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 );

Trong ví dụ này, chúng ta tạo bảng cha là “sanpham” với khóa chính là trường thông tin “id_sanpham”. Tiếp theo là bảng con có tên là “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” có tên “fk_htk_id_sanpham”. Khóa ngoại này hình thành quan hệ giữa cột “id_sanpham” trong bảng “hangtonkho” và cột “id_sanpham” trong bảng “sanpham”.

Back to top button