Cách tạo khóa ngoại trong sql

Ràng buộc khóa ngoại [Foreign Key - FK] được sử dụng để liên kết các bảng dữ liệu trong một cơ sở dữ liệu.

FK đảm bảo toàn vẹn tham chiếu cho bảng.

FK được đặt trên một cột, nó chỉ đến [hay tham chiếu đến] khóa chính trong một bảng khác.

Giả sử có hai bảng A và B, bảng A có cột a và bảng B có cột b. Muốn thiết lập liên kết giữa hai bảng A và B thông qua hai cột a và b thì:

- Nếu đặt FK trên cột a thì cột b phải là cột PK hoặc ngược lại, nếu đặt FK trên cột b thì cột a phải là cột PK.

- Kiểu dữ liệu của hai cột a và b phải giống nhau.

- Cột đặt FK phải chứa những giá trị giống với những giá trị của cột đặt PK. Ví dụ cột a của bảng A là cột PK và chứa hai giá trị 1 và 2 thì cột b của bảng B cũng chỉ chứa những giá trị 1 và 2 mà không được chứa nhưng giá trị khác.

Tạo ràng buộc FK:

Giả sử ta tạo bảng Student như sau:

CREATE TABLE Student[

studentid int not null identity,

studentname nvarchar[30],

dateofbirth date,

constraint pk_student PRIMARY KEY[studentid]

];

Bây giờ ta tạo bảng Marks và tạo ràng buộc FK trên cột studentid của bảng Marks tham chiếu đến cột studentid của bảng Student, ta sẽ có các cách tạo FK như sau:

Cách 1: Ví dụ:

CREATE TABLE Marks[

studentid int not null FOREIGN KEY REFERENCES Student[studentid],

subjectid int not null,

mark float,

constraint pk_marks primary key[studentid,subjectid]

];

Cách 2: Ví dụ:

CREATE TABLE Marks[

studentid int not null,

subjectid int not null,

mark float,

constraint pk_marks primary key[studentid,subjectid],

FOREIGN KEY[studentid] REFERENCES Student[studentid]

];

Cách 3: Ví dụ:

CREATE TABLE Marks[

studentid int not null,

subjectid int not null,

mark float,

constraint pk_marks primary key[studentid,subjectid],

constraint fk_studentid FOREIGN KEY[studentid] REFERENCES Student[studentid]

];

Cách 4: Sử dụng cú pháp như sau:

ALTER TABLE Tên_bảng1 ADD FOREIGN KEY[Tên_cột_đặt_FK] REFERENCES Tên_bảng2[Tên_cột_đặt_PK];

Ví dụ:

CREATE TABLE Marks[

studentid int not null,

subjectid int not null,

mark float,

constraint pk_marks primary key[studentid,subjectid],

];

ALTER TABLE Marks ADD FOREIGN KEY[studentid] REFERENCES Student[studentid];

Cách 5: Ta sử dụng cú pháp như sau:

ALTER TABLE Tên_bảng1 ADD CONSTRAINT Tên_ràng_buộc FOREIGN KEY[Tên_cột_đặt_FK] REFERENCES Tên_bảng2[Tên_cột_đặt_PK];

Ví dụ:

CREATE TABLE Marks[

studentid int not null,

subjectid int not null,

mark float,

constraint pk_marks primary key[studentid,subjectid],

];

ALTER TABLE Marks ADD CONSTRAINT fk_studentid FOREIGN KEY[studentid] REFERENCES Student[studentid];

Home » Khóa ngoại Foreign Key trong SQL Server

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

Khóa 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à một giá trị trong một bảng phải xuất hiện trong một bảng khác. Bảng tham chiếu được gọi là bảng mẹ và 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ẹ. Khóa ngoại có thể được tạo bằng lệnh CREATE TABLE hoặc lệnh ALTER TABLE.

Sử dụng TẠO BẢNG. Lệnh để tạo khóa ngoại

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_conTên của bảng con sẽ được tạo.Cũi 1, Cũi 2Cột sẽ được tạo trong bảng. Mỗi cột có một kiểu dữ liệu, kiểu dữ liệu này phải được chỉ định để chứa các giá trị NULL hoặc NOT NULL, nếu không, nó sẽ mặc định là NULL. Các kiểu dữ liệu trong SQL Serverfk_tenTên của ràng buộc khóa ngoại sẽ được tạo.cot_con1, cot_con2, … cot_con_nCác cột trong bang_con phải tham chiếu đến khóa chính trong bang_me.bang_meTên của bảng mẹ có chứa khóa chính được sử dụng trong bang_child.cot_me1, cot_me2, … cot_me_nCác cột trong bang_me tạo nên khóa chính. 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 state_con.xóa bỏTùy chọn. Nêu cách xử lý dữ liệu con khi xóa dữ liệu mẹ. Không có tùy chọn ACTION, CASCADE, SET NULL và SET DEFAULT.đang cập nhậtTùy chọn. Nêu cách xử lý dữ liệu con khi cập nhật dữ liệu mẹ. Không có tùy chọn ACTION, CASCADE, SET NULL và SET DEFAULT.Không có hành độngĐược sử dụng cùng với BẬT XÓA hoặc BẬT CẬP NHẬT, có nghĩa là sẽ không có quá trình xử lý nào được thực hiện trên dữ liệu con khi xóa hoặc cập nhật dữ liệu mẹ.thácĐược sử dụng cùng với ON DELETE hoặc ON UPDATE, có nghĩa là xóa hoặc cập nhật dữ liệu con khi xóa hoặc cập nhật dữ liệu mẹ.Tẩy trắngĐược sử dụng với ON DELETE hoặc ON UPDATE, có 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.Cài đặt mặc địnhĐược sử dụng với BẬT XÓA hoặc BẬT CẬP NHẬT, có 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 khóa ngoại trong SQL Server [xóa theo tầng]
  • Khóa ngoại khóa ngoại trong SQL Server [được đặt thành trống]

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 tôi đã tạo một bảng cha sanpham bằng cách sử dụng khóa chính của trường trong id_sanpham. Bước tiếp theo là tạo bảng con hangtonkho Lệnh CREATE TABLE được sử dụng để tạo khóa ngoại fk_htk_id_sanpham của bảng hangtonkho. Khóa ngoại tạo thành liên kết giữa cột id_sanpham trong bảng hangtonkho và cột id_sanpham trong bảng sanpham. Ví dụ trên cho thấy 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 chứa nhiều 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 cha sanpham có khóa chính gồm 2 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.

Sử dụng ALTER TABLE. Lệnh tạo khóa ngoại

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_conTên của bảng con sẽ được tạo.fk_tenTên của ràng buộc khóa ngoại sẽ được tạo.cot_con1, cot_con2, … cot_con_nCác cột trong bang_con phải tham chiếu đến khóa chính trong bang_me.bang_meTên của bảng mẹ có chứa khóa chính được sử dụng trong bang_child.cot_me1, cot_me2, … cot_me_nCác cột trong bang_me tạo nên khóa chính. 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 state_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 một khóa ngoại có tên fk_htk_id_sanpham trong bảng hangtonkho, 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ư trong ví dụ sau.

ALTER TABLE hangtonkho ADD CONSTRAINT fk_htk_sanpham FOREIGN KEY [ten_sanpham, diadiem] REFERENCES sanpham [ten_sanpham, diadiem];

Ví dụ trên tạo một khóa ngoại có tên fk_htk_sanpham cho bảng hangtonkho, tham chiếu đến bảng sanpham dựa trên cột ten_sanpham và diadiem. Trước: BẢNG TẠM THỜI ĐỊA PHƯƠNG trong SQL Server

Bài tiếp theo: Khóa ngoại khóa ngoại khóa ngoại trong SQL Server [xóa theo tầng]

  • Cách tạo bản sao dữ liệu trong MS SQL Server

Video liên quan

Chủ Đề