Computer >> Máy Tính >  >> Lập trình >> SQL Server

Khóa ngoại khóa ngoại trong SQL Server

Hướng dẫn này giới thiệu cách sử dụng khóa ngoại Foreign Key trong SQL Server với cú pháp và ví dụ.

Khoá ngoại trong SQL Server là gì?

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

Bảng tham chiếu được gọi là bảng mẹ, trong khi bảng chứa khóa ngoại được gọi là bảng con. Khóa ngoại trong bảng con thường tham chiếu đến khóa chính PRIMARY KEY trong bảng mẹ.

Các khóa ngoại có thể được tạo bằng lệnh CREATE TABLE hoặc lệnh ALTER TABLE.

Tạo khóa ngoại 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 { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]  [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] ); 

bang_con

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

cot1, cot2

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

Kiểu dữ liệu trong SQL Server

fk_ten

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

cot_con1, cot_con2 ,. cot_con_n

Cột trong bang_con muốn tham chiếu đến 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 dữ liệu và các cột cot_con1, cot_con2 ,. cot_con_n trong bang_con.

BẬT XÓA

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

BẬT CẬP NHẬT

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

KHÔNG CÓ HÀNH ĐỘNG

Sử dụng khi BẬT XÓA hoặc BẬT CẬP NHẬT, tức 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

Sử dụng khi BẬT XÓA hoặc BẬT CẬP NHẬT, nghĩa là dữ liệu con sẽ bị xóa hoặc cập nhật khi dữ liệu mẹ bị xóa hoặc cập nhật.

ĐẶT ĐẦY ĐỦ

Sử dụng khi BẬT XÓA hoặc BẬT CẬP NHẬT, nghĩa là dữ liệu con được đặt thành NULL khi dữ liệu mẹ bị xóa hoặc cập nhật.

ĐẶT ĐỊNH NGHĨA

Sử dụng khi BẬT XÓA hoặc BẬT CẬP NHẬT, 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.

  1. Khóa ngoại (Xóa theo tầng) trong SQL Server
  2. Khóa ngoại (Đặt Null) khóa ngoại trong SQL Server

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

Trong ví dụ trên, chúng ta tạo bảng cha, bảng sanpham với khóa chính bao gồm các trường trong id_sanpham. Tiếp theo là bảng phụ hangtonkho.

Câu lệnh CREATE TABLE được sử dụng để tạo khóa ngoại của bảng hangtonkho được đặt tên là fk_htk_id_sanpham. Khóa ngoại tạo liên kết giữa cột id_sanpham trong bảng hangtonkho và id_sanpham trong bảng sanpham.

Ví dụ trên hướng dẫn cách tạo khóa ngoại gồm 1 cột. Bây giờ, hãy tạo một khóa ngoại có nhiều hơn 1 trường thông tin.

Ví dụ:

 CREATE TABLE sanpham ( ten_sanpham VARCHAR(50) NOT NULL,  diadiem VARCHAR(50) NOT NULL,  phanloai VARCHAR(25)  CONSTRAINT sanpham_pk PRIMARY KEY (ten_sanpham, diadiem) ); 
 CREATE TABLE hangtonkho ( id_hangtonkho INT PRIMARY KEY,  ten_sanpham VARCHAR(50) NOT NULL,  diadiem VARCHAR(50) NOT NULL,  soluong INT,  luong_toithieu INT,  luong_toida INT,  CONSTRAINT fk_htk_sanpham  FOREIGN KEY (ten_sanpham, diadiem)  REFERENCES sanpham (ten_sanpham, diadiem) ); 

Trong ví dụ này, bảng mẹ sanpham có khóa chính hai cột ten_sanpham và diadiem. Bảng con và khóa ngoại phải tham chiếu đến hai cột này.

Tạo khóa ngoại bằng lệnh ALTER TABLE

Cú pháp

 ALTER TABLE bang_con ADD CONSTRAINT fk_ten  FOREIGN KEY (cot_con1, cot_con2, … cot_con_n)  REFERENCES bang_me (cot_me1, cot_me2, … cot_me_n); 

bang_con

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

fk_ten

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

cot_con1, cot_con2 ,. cot_con_n

Cột trong bang_con muốn tham chiếu đến 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 dữ liệu và các cột cot_con1, cot_con2 ,. cot_con_n trong bang_con.

Ví dụ:

 ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_id_sanpham  FOREIGN KEY (id_sanpham)  REFERENCES sanpham (id_sanpham); 

Ví dụ này tạo khóa ngoại trong bảng hangtonkho được gọi là fk_htk_id_sanpham, tham chiếu đến bảng sanpham dựa trên cột id_sanpham.

Bạn có thể tạo khóa ngoại với nhiều trường như ví dụ bên dưới.

 ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_sanpham  FOREIGN KEY (ten_sanpham, diadiem)  REFERENCES sanpham (ten_sanpham, diadiem); 

Ví dụ trên tạo khóa ngoại có tên fk_htk_sanpham cho bảng hangtonkho, tham chiếu đến trang tổng quan dựa trên cột ten_sanpham và diadiem.