Các loại ràng buộc trong SQL (Phần 1)

SQL Series 4- Các loại ràng buộc trong SQL (Phần 1): Ràng buộc khóa chính, khóa ngoại

Chia sẻ kiến thức 16/01/2023

Các ràng buộc được sử dụng để giới hạn loại dữ liệu có thể đi vào trong một bảng. Điều này đảm bảo tính chính xác và độ tin cậy của dữ liệu trong một bảng. Nếu có bất kỳ vi phạm nào giữa ràng buộc và hành động dữ liệu,  hành động đó sẽ bị hủy bỏ.

1. Khái niệm về Ràng buộc trong SQL

Các ràng buộc trong SQL được sử dụng để chỉ định các quy tắc cho dữ liệu trong một bảng.

Các ràng buộc được sử dụng để giới hạn loại dữ liệu có thể đi vào trong một bảng. Điều này đảm bảo tính chính xác và độ tin cậy của dữ liệu trong một bảng. Nếu có bất kỳ vi phạm nào giữa ràng buộc và hành động dữ liệu, hành động đó sẽ bị hủy bỏ.

2. Các loại ràng buộc thông dụng

SQL cung cấp một số loại ràng buộc thông dụng như:

  • NOT NULL: Đảm bảo dữ liệu không được rỗng hay khuyết
  • UNIQUE: Đảm bảo dữ liệu ở một trường không được lặp lại trong các bản ghi của cùng một bảng
  • DEFAULT: Đặt giá trị mặc định cho một cột nếu không có giá trị nào được chỉ định(khi chèn dữ liệu)
  • CHECK: Đảm bảo rằng các giá trị trong một cột thỏa mãn một điều kiện cụ thể
  • PRIMARY KEY:  đảm bảo giá trị dữ liệu của một trường là duy nhất và không được null, dùng làm định danh cho bản ghi trong bảng
  • FOREIGN KEY: đảm bảo mối liên kết với một bản ghi trong bảng khác, giá trị của trường khoá ngoại phải tương ứng với giá trị một trường khoá chính ở bảng khác
  • CREATE INDEX:Dùng để tạo và lấy dữ liệu từ cơ sở dữ liệu nhanh chóng

>>> Xem thêm: SQL Series 5- Bài tập thực hành tạo cơ sở dữ liệu và các bảng

3. Cách khai báo ràng buộc

Các ràng buộc có thể được khai báo qua lúc khởi tạo bảng với câu lệnh CREATE TABLE hoặc sau khi đã tạo bảng với câu lệnh ALTER TABLE

Cú pháp cơ bản với tạo bảng:

CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
    ….
);

4. Ràng buộc Khóa chính (PRIMARY KEY)

Ràng buộc khoá chính (primary key constraint) đảm bảo giá trị dữ liệu của một trường là duy nhất và không được null, dùng làm định danh cho bản ghi trong bảng.

4.1 Thêm khóa chính khi tạo bảng

Trường hợp bảng có duy nhất một trường làm khóa chính:

MySQL SQL Server / Oracle / MS Access
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255NOT NULL,
    FirstName varchar(255),
    Age int,
    PRIMARY KEY (ID)
);
CREATE TABLE Persons (
    ID int NOT NULL PRIMARY KEY,
    LastName varchar(255NOT NULL,
    FirstName varchar(255),
    Age int
);

Trường hợp bảng có nhiều trường kết hợp làm khóa chính hay còn gọi là composite primary key:

MySQL / SQL Server / Oracle / MS Access
CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);

Lưu ý: cú pháp trên cũng có thể dùng để định nghĩa tên của ràng buộc.

4.2 Thêm khóa chính sau khi đã tạo bảng

Ta muốn thêm khóa chính sau khi đã tạo bảng thì có thể sử dụng từ khóa ALTER TABLE.

MySQL / SQL Server / Oracle / MS Access

(cơ bản)

MySQL / SQL Server / Oracle / MS Access

(đặt tên khóa chính+ đặt khóa chính có nhiều trường)

ALTER TABLE Persons
ADD PRIMARY KEY (ID);

ALTER TABLE Persons
ADD CONSTRAINT PK_Person PRIMARY KEY (ID,LastName);

Lưu ý: Nếu bạn sử dụng ALTER TABLE để thêm khóa chính , các cột khóa chính phải được khai báo là không chứa giá trị NULL (khi bảng được tạo lần đầu tiên)

4.3 Xóa ràng buộc khóa chính

MySQL SQL Server / Oracle / MS Access
ALTER TABLE Persons
DROP PRIMARY KEY;
ALTER TABLE Persons
DROP CONSTRAINT PK_Person;

>>> Xem thêm: SQL Series 3- Ý nghĩa các từ khóa trong SQL

5. Ràng buộc khóa ngoại(Foreign Key)

Ràng buộc khoá ngoại (foreign key constraint) đảm bảo mối liên kết với một bản ghi trong bảng khác, giá trị của trường khoá ngoại phải tương ứng với giá trị một trường khoá chính ở bảng khác.

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

Giả sử chúng ta có 2 bảng sau :

Bảng Persons
PersonID LastName FirstName Age
1 Hansen Ola 30
2 Svendson Tove 23
3 Pettersen Kari 20
Bảng Orders
OrderID OrderNumber PersonID
1 77895 3
2 44678 3
3 22456 2
4 24562 1

Ràng buộc FOREIGN KEY ngăn không cho dữ liệu không hợp lệ được chèn vào cột khóa ngoại, bởi vì nó phải là một trong các giá trị có trong bảng cha.

Lưu ý rằng cột “PersonID” trong bảng “Orders” tham chiếu tới cột “PersonID” trong bảng “Persons”.
Cột “PersonID” trong bảng “Persons” là KHÓA CHÍNH của bảng “Persons”.
Cột “PersonID” trong bảng “Orders” là một KHÓA NGOẠI của bảng “Orders”.

5.1 Thêm khóa ngoại khi tạo bảng

MYSQL SQL Server / Oracle / MS Access
CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

CREATE TABLE Orders (
    OrderID int NOT NULL PRIMARY KEY,
    OrderNumber int NOT NULL,
    PersonID int

 FOREIGN KEY REFERENCES Persons(PersonID)
);

5.2 Thêm khóa ngoại sau khi đã tạo bảng

Ta muốn thêm khóa ngoại sau khi đã tạo bảng thì có thể sử dụng từ khóa ALTER TABLE.

MySQL / SQL Server / Oracle / MS Access

(cơ bản)

MySQL / SQL Server / Oracle / MS Access

(đặt tên khóa ngoại+khóa ngoại có nhiều trường)

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

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

5.3 Xóa ràng buộc khóa ngoại

MySQL SQL Server / Oracle / MS Access
ALTER TABLE Orders
DROP FOREIGN KEY FK_PersonOrder;
ALTER TABLE Orders
DROP CONSTRAINT FK_PersonOrder;

 

6. Sự khác nhau giữa KHÓA CHÍNH và KHÓA NGOẠI

Khóa chính Khóa ngoại
Khóa chính xác định duy nhất một bản ghi trong bảng. Khóa ngoại là một trường trong bảng và là khóa chính trong một bảng khác.
Khóa chính không chấp nhận các giá trị rỗng. Khóa ngoại có thể chấp nhận nhiều giá trị rỗng.
Theo mặc định, khoá chính là chỉ mục được nhóm và dữ liệu trong bảng cơ sở dữ liệu được tổ chức theo thứ tự của dãy chỉ mục nhóm. Khóa ngoại không tự động tạo ra một chỉ mục, nhóm hoặc không nhóm. Bạn có thể tự tạo một chỉ mục trên khoá ngoại.
Chúng ta chỉ có thể có một khóa chính trong một bảng. Chúng ta có thể có nhiều khoá ngoại trong một bảng.

 

>>> Nếu bạn đang có nhu cầu học lập trình trực tuyến, tìm hiểu ngay tại đây:

>>> Bài viết liên quan:

SQL Series 1- Hướng dẫn cơ bản về cách thao tác với Bảng trong CSDL(SQL)

SQL Series 2- Cách thao tác với dữ liệu của bảng trong CSDL(SQL)

SQL Series 3- Ý nghĩa các từ khóa trong SQL

SQL Series 4- Các loại ràng buộc trong SQL (Phần 1): Ràng buộc khóa chính, khóa ngoại

SQL Series 5- Bài tập thực hành tạo cơ sở dữ liệu và các bảng

 

Nguồn & Tài liệu tham khảo

  1. https://www.educba.com/primary-key-vs-foreign-key/
  2. https://www.w3schools.com/sql/sql_constraints.asp
  3. https://viblo.asia/p/khac-biet-giua-khoa-chinh-va-khoa-ngoai-trong-sql-924lJMdWZPM
  4. Ý nghĩa các từ khóa trong sql

Học viên Phạm Tuấn Vũ

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại