Bài này cafedev chia sẻ cho ace về cách sử dụng ràng buộc CHECK và DEFAULT trong SQL.

1. Ràng buộc KIỂM TRA(CHECK)

Ràng buộc CHECK được sử dụng để giới hạn phạm vi giá trị có thể được đặt trong một cột.

Nếu bạn định nghĩa ràng buộc KIỂM TRA(CHECK) trên một cột, nó chỉ cho phép các giá trị nhất định cho cột này.

Nếu bạn định nghĩa ràng buộc KIỂM TRA(CHECK) trên một bảng, nó có thể giới hạn các giá trị trong các cột nhất định dựa trên các giá trị trong các cột khác trong hàng.

SQL sau tạo ràng buộc KIỂM TRA(CHECK) trên cột “Age” khi bảng “Persons” được tạo. Ràng buộc KIỂM TRA(CHECK) đảm bảo rằng độ tuổi của một người phải từ 18 tuổi trở lên:

MySQL:

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

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,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int CHECK (Age>=18)
); 

Để cho phép đặt tên cho ràng buộc CHECK và để xác định ràng buộc CHECK 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,
    City varchar(255),
    CONSTRAINT CHK_Person CHECK (Age>=18 AND City='cafedev.vn')
); 
  • SQL CHECK trong ALTER TABLE

Để tạo ràng buộc KIỂM TRA trên cột “Age” khi bảng đã được tạo, hãy sử dụng SQL sau:

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ADD CHECK (Age>=18); 

Để cho phép đặt tên cho ràng buộc CHECK và để xác định ràng buộc CHECK 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 CHK_PersonAge CHECK (Age>=18 AND City='Sandnes'); 
  • Xoá CHECK Constraint

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

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;

MySQL

ALTER TABLE Persons
DROP CHECK CHK_PersonAge; 

2. Ràng buộc DEFAULT

Ràng buộc DEFAULT được sử dụng để cung cấp giá trị mặc định cho một cột.

Giá trị mặc định sẽ được thêm vào tất cả các dữ liệu mới NẾU không có giá trị nào khác được chỉ định.

  • SQL DEFAULT trong CREATE TABLE

SQL sau đặt giá trị DEFAULT cho cột “City” khi bảng “Persons” được tạo:

My SQL / 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,
    LastName varchar(255) NOT NULL,
    FirstName varchar(255),
    Age int,
    City varchar(255) DEFAULT 'Sandnes'
); 

Ràng buộc DEFAULT cũng có thể được sử dụng để chèn các giá trị hệ thống, bằng cách sử dụng các hàm như GETDATE ():

CREATE TABLE Orders (
    ID int NOT NULL,
    OrderNumber int NOT NULL,
    OrderDate date DEFAULT GETDATE()
); 
  • SQL DEFAULT trong ALTER TABLE

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

MySQL:

ALTER TABLE Persons
ALTER City SET DEFAULT 'HCM'; 

SQL Server:

ALTER TABLE Persons
ADD CONSTRAINT df_City
DEFAULT 'HCM' FOR City; 

MS Access:

ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'HCM'; 

Oracle:

ALTER TABLE Persons
MODIFY City DEFAULT 'HCM'; 
  • Xoá DEFAULT Constraint

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

MySQL:

ALTER TABLE Persons
ALTER City DROP DEFAULT; 

SQL Server / Oracle / MS Access:

ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT; 

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!