Tags:

SQL | Constraints – Ràng buộc toàn vẹn dữ liệu trong SQL

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

Các constraint này có thể áp dụng trên một cột hay một table mà có mức độ ảnh hưởng khác nhau. Nếu chỉ áp dụng trên một cột thì cột đó bắt buộc phải đảm bảo thoả mãn các điều kiện được đinh nghĩa trong constraint, trong khi áp dụng ở mức table thì tất cả các cột phải thoả mãn.

Các loại ràng buộc phổ biến

Dưới đây là một số các ràng buộc phổ biến nhất được sử dụng trong SQL.

Ràng buộc Ý nghĩa
NOT NULL Đảm bảo giá trị của cột không được nhận giá trị NULL.
DEFAULT Cung cấp một giá trị mặc định khi dữ liệu của một cột NULL.
UNIQUE Đảm bảo rằng dữ liệu của cột là duy nhất, tất cả các giá trị trong một cột là khác nhau không trùng lặp.
PRIMARY Key Dùng để thiết lập khóa chính trên bảng, giá trị của cột làm khóa chính phải là duy nhất, không được trùng lặp. Việc khai báo ràng buộc 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 Đảm bảo tất cả các giá trị trong một cột thỏa mãn một số điều kiện.
INDEX Dùng để tạo và lấy dữ liệu từ cơ sở dữ liệu một cách nhanh chóng.

Các ràng buộc có thể được chỉ định khi bạn 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.

Not Null

Nếu chúng ta chỉ định một trường của một table phải Not Null. Thì dữ liệu của sẽ đảm bảo không bao giờ trả về null khi chúng ta truy vấn. Hơn nữa, bạn sẽ không được phép để trống giá trị của trường này khi thêm hay cập nhật dữ liệu.

Ví dụ, mã SQL bên dưới sẽ tạo một bảng Student với trường IDNAME Not Null. 

CREATE TABLE Student
(
ID int(6) NOT NULL,
NAME varchar(10) NOT NULL,
ADDRESS varchar(20)
);

UNIQUE

UNIQUE là ràng buộc trên giá trị duy nhất trên các cột, có nghĩa là các dòng dữ liệu không được có giá trị trùng nhau ở những cột đó đó. Ràng buộc này giống như khóa chính vậy, vì bản chất nó cũng là một khóa.

Ví dụ trong bảng SINHVIEN sẽ có MASINHVIEN là khóa chính, và cột CMND sẽ là UNIQUE. Thực ra bạn cũng có thể lấy CMND là khoa chính nhưng như vậy sẽ không hay lắm.

Cách này bạn sẽ đặt từ khóa UNIQUE ở cuối column muốn nó có giá trị không trùng lặp.

CREATE TABLE hr.persons(
    person_id INT IDENTITY PRIMARY KEY,
    first_name VARCHAR(255) NOT NULL,
    last_name VARCHAR(255) NOT NULL,
    email VARCHAR(255) UNIQUE
);

Trường hợp này bạn đặt UNIQUE (column_list) ở cuối lệnh Create Table, nếu có nhiều cột thì cách nhau bởi dấu phẩy.

CREATE TABLE hr.persons(
    person_id INT IDENTITY PRIMARY KEY,
    first_name VARCHAR(255) NOT NULL,
    last_name VARCHAR(255) NOT NULL,
    email VARCHAR(255),
    UNIQUE(email)
);

PRIMARY KEY

Primary key được dùng để đinh nghĩa các khoá chính trong một bảng. Khóa chính là một trường hoặc kết hợp nhiều trường và được xác định là một bản ghi duy nhất. Không trường nào trong khóa chính được chứa giá trị NULL. Một bảng chỉ có duy nhất một khóa chính. Khóa chính có thể được định nghĩa bằng lệnh CREATE TABLE hoặc lệnh ALTER TABLE.

CREATE TABLE Student
(
ID int(6) NOT NULL UNIQUE,
NAME varchar(10),
ADDRESS varchar(20),
PRIMARY KEY(ID)
);

FOREIGN KEY

Dùng để thiết lập một khoá ngoại cho một bảng, những giá trị này phải đảm bảo tham chiếu đến một khoá chính trong một bảng khác.

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)
)

CHECK

Sử dụng Check Constraint chúng ta có thể chỉ định một điều kiện cho một trường cụ thể.

Ví dụ tạo một constraint cho trường AGE bắt buộc Not Null và phải có giá trị trên 18

CREATE TABLE Student
(
ID int(6) NOT NULL,
NAME varchar(10) NOT NULL,
AGE int NOT NULL CHECK (AGE >= 18)
);

DEFAULT

Constraint này được sử dụng để cung cấp giá trị mặc định cho một trường dữ liệu kho nó không được cung cấp tại thời điểm thêm hay cập nhật.

Ví dụ tạo constraint đảm bảo giá trị của AGE sẽ luôn là 18 khi nó không được cung cấp.

CREATE TABLE Student
(
ID int(6) NOT NULL,
NAME varchar(10) NOT NULL,
AGE int DEFAULT 18
);

Xóa bỏ ràng buộc (Drop Constraint)

Bất kỳ ràng buộc nào đã định nghĩa đều có thể bị xóa bỏ bằng cách sử dụng lệnh ALTER TABLE với tùy chọn DROP CONSTRAINT.

Ví dụ, để xoá constraint khóa chính trong bảng EMPLOYEES, bạn có thể sử dụng lệnh sau đây.

ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK;

Một số cơ sở dữ liệu có thể cung cấp các phím tắt để xoá các ràng buộc nhất một cách ngắn gọn hơn. Ví dụ, để loại bỏ ràng buộc khóa chính cho một bảng trong Oracle, bạn có thể sử dụng lệnh sau đây.

ALTER TABLE EMPLOYEES DROP PRIMARY KEY;

Ngoài ra có một số cơ sở dữ liệu cho phép vô hiệu hoá một constraint thay vì xoá chúng vĩnh viễn. Sẽ rất thích hợp khi bạn chỉ muốn ngắt nó đi tạm thời và sau đó lại kích hoạt nó hoạt động trở lại.

Nguồn tham khảo

https://www.tutorialspoint.com/sql/sql-constraints.htm

https://www.geeksforgeeks.org/sql-constraints/

5 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x