ON DELETE CASCADE LÀ GÌ

  -  

Khóa ngoại được dùng để tăng tính tham chiếu trong cơ sở dữ liệu SQL Server. Khóa ngoại nghĩa là giá trị trong bảng này phải xuất hiện trong bảng khác.

Bạn đang xem: On delete cascade là gì

Bảng tham chiếu gọi là bảng mẹ, còn bảng chứa khóa ngoại gọi là bảng con. Khóa ngoại trong bảng con thường tham chiếu tới khóa chínhPRIMARY KEYtrong bảng mẹ.

Khóa ngoại có thể được tạo bằng lệnhCREATE TABLEhoặc lệnhALTER 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 { NO ACTION | CASCADE | SET NULL | SET DEFAULT } > < ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } > );

Giải thích các tham số trên

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ó 1 loại dữ 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.

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 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 dữ liệu và các cột cot_con1, cot_con2, … cot_con_n trong bang_con.

ON DELETE

Tùy chọn. Cho biết sẽ làm gì với dữ liệu con khi dữ liệu mẹ bị xóa. Có các lựa chọn NO ACTION, CASCADE, SET NULL và SET DEFAULT.

ON UPDATE

Tùy chọn. Cho biết sẽ làm gì với dữ liệu con khi dữ liệu mẹ được cập nhật. Có các lựa chọn NO ACTION, CASCADE, SET NULL và SET DEFAULT.

Xem thêm: Phần Mềm Hỗ Trợ Chơi Game - Cài Game Không Bị Lỗi, Giật Lag

NO ACTION

Dùng với ON DELETE hoặc ON UPDATE, nghĩa là không làm gì với dữ liệu con khi dữ liệu mẹ bị xóa hoặc cập nhật.

CASCADE

Dùng với ON DELETE hoặc ON UPDATE, nghĩa là dữ liệu con bị xóa hoặc cập nhật khi dữ liệu mẹ bị xóa hoặc cập nhật.

SET NULL

Dùng với ON DELETE hoặc ON UPDATE, nghĩa là dữ liệu con được đặt là NULL khi dữ liệu mẹ bị xóa hoặc cập nhật.

SET DEFAULT

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

Khóa ngoại Foreign Key (Cascade Delete) trong SQL ServerKhóa ngoại Foreign Key (Set Null) trong SQL Server

Ví dụ :

Chúng ta sẽ hai bảng"products" và"inventory". Trong bảng "products" có khóa chính là"product_id" cũng là khóa ngoại trong bảng "inventory".

CREATE TABLE products ( product_id INT PRIMARY KEY, product_name VARCHAR(50) NOT NULL, category VARCHAR(25) ); CREATE TABLE inventory ( inventory_id INT PRIMARY KEY, product_id INT NOT NULL, quantity INT, min_level INT, max_level INT, CONSTRAINT fk_inv_product_id FOREIGN KEY (product_id) REFERENCES products (product_id) ); Kết quả:

*

Tên khóa ràng buộc khóa ngoại trong bảng "inventory"fk_inv_product_id.Nó sẽ thiết lập quan hệ giữ hai bảng"inventory""products" trên cộtproduct_id.

Chúng ta có thể kiểm tra 2 bảng:.

*
*

Tạo khóa ngoại sử dụng nhiều trường

Create foreign key with more than one field

Trong ví dụ trên chúng ta tạo khóa ngoại sử dụng một cột, trong ví dụ sau chúng ta sẽ tạo khóa ngoại nhiều hơn một trường.

Giờ chúng ta tạo hai bảng"products2" "inventory2". Trong ví dụ này bảng "products2"có khóa chính là hai cộtproduct_name vàlocation.

Xem thêm: Lên Đồ Ngộ Không Liên Quân, Hướng Dẫn Chơi Ngộ Không Liên Quân Mobile Mùa 19

Do đó, bảng thứ hai phải có khóa ngoại là hai cột này

Trong ví dụ này, tên khóa ngoại làfk_inv_product tham chiếu đến bảng products có hai trường: the product_name vàlocation.

CREATE TABLE products2 ( product_name VARCHAR(50) NOT NULL, location VARCHAR(50) NOT NULL, category VARCHAR(25) CONSTRAINT products_pk PRIMARY KEY (product_name, location) ); CREATE TABLE inventory2 ( inventory_id INT PRIMARY KEY, product_name VARCHAR(50) NOT NULL, location VARCHAR(50) NOT NULL, quantity INT, min_level INT, max_level INT, CONSTRAINT fk_inv_product FOREIGN KEY (product_name, location) REFERENCES products2 (product_name, location) ); Kết quả: