Constraint trong SQL là một quy tắc được áp dụng cho các cột trong bảng để giới hạn dữ liệu được chèn, cập nhật hoặc xóa. Chúng được sử dụng để đảm bảo tính nhất quán và tính toàn vẹn của dữ liệu trong cơ sở dữ liệu. Nhờ các constraint, chúng ta có thể xây dựng một cơ sở dữ liệu ổn định và đáng tin cậy. Trong bài viết này, chúng ta sẽ cùng tìm hiểu về ràng buộc trong SQL và cách sử dụng hiệu quả từng ràng buộc.

1. Ràng buộc(Constraint) trong SQL là gì

Ràng buộc(constraint) trong SQL là các quy tắc được áp dụng trên các dữ liệu của bảng. Chúng được sử dụng để kiểm tra tính hợp lệ của dữ liệu đầu vào, tính chính xác và toàn vẹn của dữ liệu.

2. Các loại Constraint phổ biến

NOT NULL: Constraint này cho biết rằng chúng ta không thể lưu một giá trị NULL cho cột đã được gán ràng buộc này. Điều đó có nghĩa là, nếu một cột được định nghĩa là NOT NULL, cột đó sẽ không thể chấp nhận các giá trị NULL được nữa.

UNIQUE: Sử dụng khi chúng ta muốn định nghĩa cho một cột phải có giá trị của nó là duy nhất, nếu một bản ghi đã có giá trị này trong cột của nó thì giá trị đó sẽ không được sử dụng để điền cho bản ghi nào khác trong cơ sở dữ liệu.

PRIMARY KEY: Một primary key(khóa chính) một hoặc một tập các trường có giá trị là duy nhất, có thể được sử dụng để phân biệt giữa các bản ghi với nhau. Việc khai báo các cột khóa chính yêu cầu các cột phải NOT NULL.

FOREIGN KEY: Dùng để thiết lập khóa ngoại trên bảng, tham chiếu đến bảng khác thông qua giá trị của cột được liên kết. Giá trị của cột được liên kết phải là duy nhất trong bảng kia.

CHECK: Giúp kiểm tra tính hợp lệ của đầu vào dữ liệu, điều này đảm bảo tất cả giá trị trong cột đảm bảo một điều kiện nào đó.

DEFAULT: Ràng buộc này định nghĩa một giá trị mặc định cho một cột dữ liệu khi nó không được điền một giá trị cụ thể bởi người dùng

3. Định nghĩa một ràng buộc như thế nào?

Chúng ta có thể thêm một ràng buộc tại thời điểm tạo bảng bằng câu lệnh CREATE TABLE. Chúng ta cũng có thể định nghĩa các ràng buộc sau khi đã tạo bảng bằng cách sử dụng câu lệnh ALTER TABLE.

Cú pháp thực hiện:

Dưới đây là cú pháp để thực hiện tạo các ràng buộc sử dụng lệnh CREATE TABLE.

CREATE TABLE sample_table

(

column1 data_type(size) constraint_name,

column2 data_type(size) constraint_name,

column3 data_type(size) constraint_name,

....

);

sample_table: Tên của bảng cần tạo.

data_type: Kiểu dữ liệu cần được lưu vào trường.

constraint_name: Tên của ràng buộc, ví dụ như: NOT NULL, UNIQUE, PRIMARY KEY etc.

>>> Xem thêm bài viết:

- Khai báo và sử dụng mảng các đối tượng trong Java

- Phân biệt ArrayList, Set và Vector trong Java

- Lập trình đa luồng là gì? Hướng dẫn lập trình đa luồng bằng ngôn ngữ Java

4. Tiếp theo chúng ta sẽ tìm hiểu chi tiết về từng ràng buộc

4.1. NOT NULL

Nếu ràng buộc này được sử dụng, có nghĩa là một trường dữ liệu sẽ không nhận NULL làm giá trị của nó. Bạn cũng sẽ không thể điền thêm một bản ghi vào cơ sở dữ liệu mà không điền dữ liệu cho cột đã được định nghĩa là NOT NULL.

Trong ví dụ dưới đây, câu truy vấn(query) tạo bảng Student với trường IDNAME có ràng buộc NOT NULL. Theo đó, khi chúng ta thêm bản ghi, chúng ta cần đảm bảo hai trường này phải có dữ liệu, nếu không nó sẽ báo lỗi và chúng ta sẽ không được phép thêm bản ghi.

CREATE TABLE Student

(

ID int(6) NOT NULL,

NAME varchar(10) NOT NULL,

ADDRESS varchar(20)

);

Sử dụng ALTER TABLE để thêm ràng buộc

ALTER TABLE Student MODIFY NAME char(10) NOT NULL;

4.2. UNIQUE

Ràng buộc này giúp thực hiện việc phân biệt các bản ghi trong một bảng, cụ thể là với một cột nào đó thì các bản ghi trong bảng phải có giá trị cột này khác nhau. Chúng ta có thể thực hiện định nghĩa ràng buộc này trên nhiều cột của một bảng

Chúng ta có thể thêm ràng buộc này khi tạo bảng

CREATE TABLE Customer (

ID CHAR(10) NOT NULL,

NAME VARCHAR(50) NOT NULL,

ADDRESS VARCHAR(50) NOT NULL,

PHONE VARCHAR(50) UNIQUE,

DOB DATE

);

Hoặc thêm ràng buộc sau khi đã tạo bảng

ALTER TABLE Customer

ADD CONSTRAINT unique_phone UNIQUE (PHONE);

4.3. PRIMARY KEY

Khóa chính là một hoặc nhiều trường thực hiện nhiệm vụ phân biệt các bản ghi trong một bảng. Nếu một trường trong bảng được định nghĩa là primary key thì trường này sẽ không nhận vào giá trị NULL và toàn bộ các dòng sẽ cần trường này có giá trị riêng biệt. Điều này có nghĩa là, khóa chính là kết hợp của hai ràng buộc NOT NULLUNIQUE.

Khai báo trực tiếp PRIMARY KEY:

CREATE TABLE Property (

ID CHAR(10) PRIMARY KEY,

PROPERTY_NAME VARCHAR(70) NOT NULL,

PROPERTY_TYPE VARCHAR(30),

VALUE MONEY

);

Định nghĩa ràng buộc:

CREATE TABLE Property (

ID CHAR(10),

CONSTRAINT pk_id PRIMARY KEY(ID),

PROPERTY_NAME VARCHAR(70) NOT NULL,

PROPERTY_TYPE VARCHAR(30),

VALUE MONEY

);

Sửa đổi PRIMARY KEY với ALTER TABLE

ALTER TABLE Property

ADD CONSTRAINT pk_prop_id PRIMARY KEY (ID);

4.4. FOREIGN KEY

Foreign key hay khóa ngoài là một trường trong bảng được sử dụng để phân biệt với các dòng của một bảng khác. Điều này có nghĩa là, trường này trỏ tới khóa chính của bảng khác. Việc này thường xuyên tạo một liên kết giữa các bảng với nhau.

Chúng ta hãy cùng đánh giá hai bảng dưới đây

Orders

O_IDORDER_NOC_ID
122533
233253
345212
485321

Customers

C_IDNAMEADDRESS
1RAMESHDELHI
2SURESHNOIDA
3DHARMESHGURGAON

Chúng ta có thể thấy được trường C_ID trong bảng Orders là khóa chính của bảng Customers, nó sẽ thực định danh cho các cột của bảng Customers. Từ đó, chúng ta có thể tạo một khóa phụ cho bảng Orders như sau:

CREATE TABLE Orders

(

O_ID int NOT NULL,

ORDER_NO int NOT NULL,

C_ID int,

PRIMARY KEY (O_ID),

FOREIGN KEY (C_ID) REFERENCES Customers(C_ID)

)

4.5. CHECK

Ràng buộc này được sử dụng để đảm bảo đầu vào dữ liệu của một trường thỏa mãn một điều kiện nào đó. Ở đây chúng ta có thể tham khảo một vài ví dụ sau:

Tạo ràng buộc check trường age > 18, khi tạo bảng


CREATE TABLE Employee

(

ID int(6) PRIMARY KEY,

NAME varchar(10) NOT NULL,

AGE int NOT NULL CHECK (AGE >= 18)

);

Sử dụng ALTER TABLE để thêm ràng buộc sau khi đã tạo bảng

ALTER TABLE Employee

ADD CONSTRAINT check_age CHECK (AGE >= 18);

4.6. DEFAULT

Ràng buộc này được sử dụng để cung cấp một giá trị mặc định cho trường trong bảng. Điều đó có nghĩa là, tại thời điểm thêm bản ghi mới vào bảng, nếu người dùng không điền giá trị cho các trường hay thì giá trị mặc định sẽ được gán cho các trường này của bản ghi.

Ví dụ dưới đây, chúng ta định nghĩa trường AGE của bảng STUDENT sẽ có giá trị mặc định là 18

CREATE TABLE Student

(

ID int(6) NOT NULL,

NAME varchar(10) NOT NULL,

AGE int DEFAULT 18

);

Chúng ta cũng có thể thêm ràng buộc sau khi đã tạo bảng bằng lệnh sau:

ALTER TABLE Student

ADD CONSTRAINT df_age DEFAULT 18 FOR AGE;

4.7. Xóa bỏ, kích hoạt hoặc bỏ kích hoạt một ràng buộc

Cú pháp xóa bỏ:

ALTER TABLE <table_name>

DROP CONSTRAINT <constraint_name>

Khi không muốn kiểm tra một ràng buộc nữa, chúng ta có thể sử dụng cú pháp:

ALTER TABLE <table_name>

NOCHECK CONSTRAINT <constraint_name>

Tái kích hoạt ràng buộc bằng cú pháp:

ALTER TABLE <table_name>

WITH CHECK CHECK CONSTRAINT <constraint_name>

Kết luận

Trên đây là những gì Stringee tổng hợp và tự đưa ra ví dụ minh họa cho từng phần. Hi vọng sẽ giúp ích cho các bạn trong quá trình sử dụng constraint trong câu lệnh SQL.


Stringee Communication APIs là giải pháp cung cấp các tính năng giao tiếp như gọi thoại, gọi video, tin nhắn chat, SMS hay tổng đài CSKH cho phép tích hợp trực tiếp vào ứng dụng/website của doanh nghiệp nhanh chóng. Nhờ đó giúp tiết kiệm đến 80% thời gian và chi phí cho doanh nghiệp bởi thông thường nếu tự phát triển các tính năng này có thể mất từ 1 - 3 năm.

Bộ API giao tiếp của Stringee hiện đang được tin dùng bởi các doanh nghiệp ở mọi quy mô, lĩnh vực ngành nghề như TPBank, VOVBacsi24, VNDirect, Shinhan Finance, Ahamove, Logivan, Homedy,  Adavigo, bTaskee…

Quý bạn đọc quan tâm xin mời đăng ký NHẬN TƯ VẤN TẠI ĐÂY: