Ràng buộc FOREIGN KEY được sử dụng trong định nghĩa bảng dữ liệu nhằm tạo nên mối quan hệ giữa các bảng trong một cơ sở dữ liệu. Một hay một tập các cột trong một bảng được gọi là khoá ngoại, tức là có ràng buộc FOREIGN KEY, nếu giá trị của nó được xác định từ khoá chính (PRIMARY KEY) hoặc khoá phụ (UNIQUE) của một bảng dữ liệu khác.
Ràng buộc FOREIGN KEY được định nghĩa theo cú pháp dưới đây:
[CONSTRAINT tên_ràng_buộc]
FOREIGN KEY [(danh_sách_cột)]
REFERENCES tên_bảng_tham_chiếu(danh_sách_cột_tham_chiếu)
[ON DELETE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
[ON UPDATE CASCADE | NO ACTION | SET NULL | SET DEFAULT]
Việc định nghĩa một ràng buộc FOREIGN KEY bao gồm các yếu tố sau:
• Tên cột hoặc danh sách cột của bảng được định nghĩa tham gia vào khoá ngoài.
• Tên của bảng được tham chiếu bởi khoá ngoài và danh sách các cột được tham chiếu đến trong bảng tham chiếu.
• Cách thức xử lý đối với các bản ghi trong bảng được định nghĩa trong trường hợp các bản ghi được tham chiếu trong bảng tham chiếu bị xoá (ON DELETE) hay cập nhật (ON UPDATE). SQL chuẩn đưa ra 4 cách xử lý:
-
CASCADE: Tự động xoá (cập nhật) nếu bản ghi được tham chiếu bị xoá (cập nhật).
-
NO
ACTION: (Mặc định) Nếu bản ghi trong bảng tham chiếu đang được tham
chiếu bởi một bản ghi bất kỳ trong bảng được định nghĩa thì bàn ghi đó
không được phép xoá hoặc cập nhật (đối với cột được tham chiếu).
-
SET NULL: Cập nhật lại khoá ngoài của bản ghi thành giá trị NULL (nếu cột cho phép nhận giá trị NULL).
-
-
SET DEFAULT: Cập nhật lại khoá ngoài của bản ghi nhận giá trị mặc định (nếu cột có qui định giá trị mặc định).
Ví dụ: Câu lệnh dưới đây định nghĩa bảng DIEMTHI với hai khoá ngoài trên cột MASV và cột MAMONHOC (giả sử hai bảng SINHVIEN và MONHOC đã được định nghĩa)
CREATE TABLE diemthi
(
mamonhoc NVARCHAR(10) NOT NULL ,
masv NVARCHAR(10) NOT NULL ,
diemlan1 NUMERIC(4, 2),
diemlan2 NUMERIC(4, 2),
CONSTRAINT pk_diemthi PRIMARY KEY(mamonhoc,masv),
CONSTRAINT fk_diemthi_mamonhoc
FOREIGN KEY(mamonhoc)
REFERENCES monhoc(mamonhoc)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT fk_diemthi_masv
FOREIGN KEY(masv)
REFERENCES sinhvien(masv)
ON DELETE CASCADE
ON UPDATE CASCADE
)
Lưu ý:
• Cột được tham chiếu trong bảng tham chiếu phải là khoá chính (hoặc là khoá phụ).
• Cột được tham chiếu phải có cùng kiểu dữ liệu và độ dài với cột tương ứng trong khóa ngoài.
• Bảng tham chiếu phải được định nghĩa trước. Do đó, nếu các bảng có mối quan hệ vòng, ta có thể không thể định nghĩa ràng buộc FOREIGN KEY ngay trong câu lệnh CREATE TABLE mà phải định nghĩa thông qua lệnh ALTER TABLE.
<3
ReplyDelete<3
ReplyDeletecreate table zthanhvien
ReplyDelete(
maso char(10) not null primary key,
hoten nvarchar(20) not null,
donvicongtac nvarchar(30),
quocgia nvarchar(20),
diachiemail nvarchar (30) not null,
ban nvarchar(20),
maban char(20),
)
create table ztaikhoan
(
tentaikhoan varchar(20) not null primary key,
matkhau varchar(20) not null,
mathanhvien char(10) not null
)
create table ztacgia
(
maso char(10) not null primary key,
donvicongtac01 nvarchar(30),
donvicongtac02 nvarchar(30),
)
create table ztomtatbaocao
(
mabaocao int not null identity(1,1) primary key,
tenbaocao nvarchar(50) not null,
noidungbaocao nvarchar(3000),
matacgiachinh char(10),
matacgiaphu01 char(10),
matacgiaphu02 char(10)
)
alter table ztacgia add foreign key(maso) references zthanhvien(maso) on delete cascade on update cascade
alter table ztaikhoan add foreign key(mathanhvien) references zthanhvien(maso) on delete cascade on update cascade
alter table ztomtatbaocao add foreign key(matacgiachinh) references ztacgia(maso) on delete cascade on update cascade
alter table ztomtatbaocao add foreign key(matacgiaphu01) references ztacgia(maso) on delete cascade on update cascade
alter table ztomtatbaocao add foreign key(matacgiaphu02) references ztacgia(maso) on delete cascade on update cascade
Msg 1785, Level 16, State 0, Line 378
Introducing FOREIGN KEY constraint 'FK__ztomtatba__matac__55009F39' on table 'ztomtatbaocao' may cause cycles
or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Msg 1750, Level 16, State 0, Line 378
Could not create constraint or index. See previous errors.
bị báo lỗi ở 2 dòng cuối bạn có thể giúm mình không?