Chủ Nhật, 30 tháng 7, 2023

Khóa ngoại Foreign Key trong SQL

Trong bài này bạn sẽ được học cách tạo khóa ngoại Foreign Key bằng câu lệnh SQL thể hiện qua các hệ quản trị CSDL như SQL Server, Oracle, MySQL.

Khóa ngoại là những column đặc biệc dùng để thể hiện mối liên kết giữa hai bảng. Bảng A có column khóa ngoại, nó sẽ trỏ đến khóa chính của bảng B thì ta gọi A là bảng con và B là bảng cha.

Giả sử ta có hai bảng như sau:

  • Orders (OrderID. OrderNumber, PersonID)
  • Persons (PersonID, LastName, FirstName)

Gạch chân là khóa chính và màu đỏ là khóa ngoại. Như vậy bảng Orders là bảng con vì nó có khóa ngoại PersonID trỏ đến khóa chính của bảng cha là bảng Persion. bây giờ ta sẽ học cách tạo khóa ngoại nhé.

Bài viết này được đăng tại tranvanbinh.vn

Mục lục

  • 1. Tạo Foreign Key trong lệnh CREATE TABLE
  • 2. Tạo Foreign Key bằng lệnh Alter Table
  • 3. Xóa khóa ngoại

1. Tạo Foreign Key trong lệnh CREATE TABLE

Bạn có thể tạo khóa ngoại ngay trong lệnh tạo bảng Create Table, cách làm như sau:

MySQL
1
2
3
4
5
6
7
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:
1
2
3
4
5
CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    PersonID int FOREIGN KEY REFERENCES Persons(PersonID)
);

Để đặt tên cho khóa ngoại thì ta viết như sau:

MySQL / SQL Server / Oracle / MS Access
1
2
3
4
5
6
7
8
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)
);

Khi có tên thì sau này rất dễ dàng quản lý khóa ngoại, bạn có thể xóa khóa ngoại thông qua tên của nó.

2. Tạo Foreign Key bằng lệnh Alter Table

Lệnh Alter Table cho phép bạn tạo khóa ngoại, lệnh này được dùng sau khi bạn đã tạo bảng.

MySQL / SQL Server / Oracle / MS Access
1
2
ALTER TABLE Orders
ADD FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

Hoặc sử dụng cách sau để đặt tên cho khóa ngoại.

MySQL / SQL Server / Oracle / MS Access:
1
2
3
ALTER TABLE Orders<br />
ADD CONSTRAINT FK_PersonOrder<br />
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

3. Xóa khóa ngoại

Để xóa được khóa ngoại thì bắt buộc bạn phải biết tên của khóa ngoại, vì vậy khuyến khích bạn khi tạo khóa ngoại thì hãy đặt tên cho nó nhé.

Để xóa thì bạn sử dụng đoạn code sau:

MySQL
1
2
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;

SQL Server / Oracle / MS Access
1
2
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;

Một số lưu ý khi xóa khóa ngoại:

  • Sau khi xóa xong thì giữa hai bảng sẽ không còn ràng buộc, vì vậy dữ liệu cho column khóa ngoại của bảng con được tự do, không bắt buộc phải nằm trong phạm vi của bảng cha.
  • Phải chắc chắn là tên của khóa ngoại tồn tại, nếu không thì sẽ nhận thông báo lỗi.
=============================
Nếu bạn muốn tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ kinh nghiệm, thủ tục, quy trình, bí kíp thực chiến mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin1_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 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: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Đị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

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

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