Bài này cafedev chia sẻ cho ace về cách sử dụng và hiểu về Constraint, NOT NULL Constraint, UNIQUE Constraint là gì? khi thao tác với cơ sở dữ liệu.

Hiện tại trong SQL có khá nhiều loại constraint khác nhau, sau đây ta sẽ tìm hiểu chi tiết từng loại.

1. Constraint là gì và cách tạo nó?

Constraint có nghĩa là ràng buộc cái gì đó, vậy Constraint là một hoặc nhiều ràng buộc SQL được sử dụng để chỉ định các quy tắc cho dữ liệu trong bảng.

  • Tạo Constraint

Các ràng buộc(Constraint) có thể được chỉ định khi bảng được tạo bằng câu lệnh CREATE TABLE hoặc sau khi bảng được tạo bằng câu lệnh ALTER TABLE.

  • Cú pháp
CREATE TABLE table_name (
    column1 datatype constraint,
    column2 datatype constraint,
    column3 datatype constraint,
    ....
);
  • Các loại constraint

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

SQL được sử dụng để chỉ định các quy tắc cho dữ liệu trong 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 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 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ỏ.

Các ràng buộc sau thường được sử dụng trong SQL:

  • NOT NULL – Đảm bảo rằng một cột không thể có giá trị NULL
  • UNIQUE – Đảm bảo rằng tất cả các giá trị trong một cột là khác nhau
  • PRIMARY KEY – Sự kết hợp giữa KHÔNG ĐẦY ĐỦ và ĐỘC ĐÁO. Xác định duy nhất từng hàng trong bảng
  • FOREIGN KEY – Xác định duy nhất một hàng / bản ghi trong bảng khác
  • CHECK – Đảm bảo rằng tất cả các giá trị trong một cột thỏa mãn một điều kiện cụ thể
  • DEFAULT – Đặt giá trị mặc định cho một cột khi không có giá trị nào được chỉ định
  • INDEX – Được sử dụng để tạo và truy xuất dữ liệu từ cơ sở dữ liệu rất nhanh chóng

2. Ràng buộc NOT NULL

Theo mặc định, một cột có thể chứa các giá trị NULL.

Ràng buộc NOT NULL thực thi cột KHÔNG chấp nhận giá trị NULL.

Điều này buộc một trường luôn chứa giá trị, có nghĩa là bạn không thể chèn bản ghi mới hoặc cập nhật bản ghi mà không thêm giá trị vào trường này.

Ví dụ:

SQL sau đảm bảo rằng các cột “ID”, “LastName” và “FirstName” sẽ KHÔNG chấp nhận giá trị NULL khi bảng “Persons” được tạo:

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255) NOT NULL,
    Age int
); 

Để tạo ràng buộc KHÔNG ĐẦY ĐỦ trên cột “Age” khi bảng “Persons” đã được tạo, hãy sử dụng SQL sau:

ALTER TABLE Persons
MODIFY Age int NOT NULL; 

3. Ràng buộc duy nhất(UNIQUE Constraint)

Ràng buộc UNIQUE đảm bảo rằng tất cả các giá trị trong một cột là khác nhau.

Cả ràng buộc UNIQUE và PRIMARY KEY đều đảm bảo tính duy nhất cho một cột hoặc tập hợp các cột.

Ràng buộc PRIMARY KEY tự động có một ràng buộc UNIQUE constraint.

Tuy nhiên, bạn có thể có nhiều ràng buộc DUY NHẤT(UNIQUE constraints) trên mỗi bảng, nhưng chỉ có một ràng buộc KEY CHÍNH(PRIMARY KEY) cho mỗi bảng.

Ví dụ:

SQL sau tạo ràng buộc DUY NHẤT(UNIQUE) trên cột “ID” khi bảng “Persons” được tạo:

SQL Server / Oracle / MS Access:

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

CREATE TABLE Persons (
    ID int NOT NULL UNIQUE,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int
);

MySQL:

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    UNIQUE (ID)
); 

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

MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Persons (
    ID int NOT NULL,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    CONSTRAINT UC_Person UNIQUE (ID,LastName)
); 

Để tạo ràng buộc DUY NHẤT trên cột “ID” khi bảng đã được tạo, hãy sử dụng SQL sau:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD UNIQUE (ID); 

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

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName); 
  • DROP a UNIQUE Constraint – Xoá một ràng buộc

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

MySQL:

ALTER TABLE Persons
DROP INDEX UC_Person; 

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT UC_Person; 

Full series tự học SQL từ cơ bản tới nâng cao tại đây nha.

Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:

Chào thân ái và quyết thắng!

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!