Thứ Ba, 12 tháng 1, 2021

SQL FOREIGN KEY Constraint

Ràng buộc KEY FOREIGN trong SQL

KEY FOREIGN KEY là một khóa dùng để liên kết hai bảng với nhau để ràng buộc dữ liệu.

KEY FOREIGN KEY là một trường (hoặc tập hợp các trường) trong một bảng tham chiếu đến KHÓA CHÍNH trong một bảng khác.

Bảng chứa khóa ngoại được gọi là bảng con và bảng chứa khóa ứng viên được gọi là bảng tham chiếu hoặc bảng cha.

Có 3 loại khóa ngoại với các tùy chọn sau:

  • ON DELETE CASCADE: Xóa dòng cha thì xóa luôn các con (ALTER TABLE SAMPLE1 ADD FOREIGN KEY (COL1) REFERENCES SAMPLE (COL2) ON DELETE CASCADE;)
  • The ON DELETE SET NULL: Khi xóa dòng cha thì các con là NULL (ALTER TABLE SAMPLE1 ADD FOREIGN KEY (COL1) REFERENCES SAMPLE (COL2) ON DELETE SET NULL;)
  • ON DELETE NO ACTION (mặc định): Ngăn không cho xóa cha khi còn con --> Nên dùng (ALTER TABLE SAMPLE1 ADD FOREIGN KEY (COL1) REFERENCES SAMPLE (COL2)ON DELETE NO ACTION;)

Nhìn vào hai bảng sau:

Bảng "Người":

PersonIDLastNameFirstNameAge
1HansenOla30
2SvendsonTove23
3PettersenKari20

Bảng "Đơn hàng":

OrderIDOrderNumberPersonID
1778953
2446783
3224562
4245621

Lưu ý rằng cột "PersonID" trong bảng "Order" trỏ đến cột "PersonID" trong bảng "Person".

Cột "ID Người" trong bảng "Người" là TỪ KHÓA CHÍNH trong bảng "Người".

Cột "PersonID" trong bảng "Đơn hàng" là một TỪ KHÓA NGOẠI TỆ trong bảng "Đơn hàng".

Ràng buộc FOREIGN KEY được sử dụng để ngăn chặn các hành động phá hủy liên kết giữa các bảng.

Ràng buộc NGOẠI KHÓA cũng ngăn không cho dữ liệu không hợp lệ được chèn vào cột khóa ngoại, vì nó phải là một trong những giá trị có trong bảng mà nó trỏ tới.

SQL FOREIGN KEY trên TẠO BẢNG

SQL sau tạo một TỪ KHÓA NGOẠI TỆ trên cột "PersonID" khi bảng "Đơn hàng" được tạo:

MySQL:

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

SQL Server / Oracle / MS Access:

CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);

Để cho phép đặt tên cho ràng buộc NGOẠI KHÓA và để xác định ràng buộc NGOẠI KHÓA trên nhiều cột, hãy sử dụng cú pháp SQL sau:

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    CONSTRAINT FK_PersonOrder FOREIGN KEY (PersonID)
    REFERENCES Persons(PersonID)
);

SQL FOREIGN KEY trên ALTER TABLE

Để tạo ràng buộc NGOẠI KHÓA trên cột "PersonID" khi bảng "Đơn hàng" đã được tạo, hãy sử dụng SQL sau:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

Để cho phép đặt tên cho ràng buộc NGOẠI KHÓA và để xác định ràng buộc NGOẠI KHÓA trên nhiều cột, hãy sử dụng cú pháp SQL sau:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

VƯỢT QUA FOREIGN KEY

Để loại bỏ ràng buộc FOREIGN KEY, hãy sử dụng SQL sau:

MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;

SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;
==================================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile: 0902912888
⚡️ Skype: tranbinh48ca
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: http://bit.ly/ytb_binhoraclemaster
👨 Tiktok: https://www.tiktok.com/@binhoraclemaster?lang=vi
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhoracle
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

SQL FOREIGN KEY Constraint, #OracleTutorial #OracleDBA #OracleDatabaseAdministration #học oracle database #oca #ocp #tự học oracle

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master