SQL Series 6- Các loại ràng buộc trong SQL (Phần 2): Not Null, Unique, Default, Check
- Cách tạo bảng trong SQL
- Tích hợp ChatGPT và SQL: Tiến bộ và cơ hội trong nhận dạng giọng nói dựa trên AI
- ChatGPT và SQL: Hỗ trợ Sức khỏe Tâm thần thông qua Trí tuệ Nhân tạo
- SQL Series 5- Bài tập thực hành tạo cơ sở dữ liệu và các bảng
- 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
Table of Contents
Xin chào các bạn, trong bài trước chúng ta đã học về 2 kiểu ràng buộc trong SQL là Khóa chính và Khóa ngoại đều là các yếu tố quan trọng trong cơ sở dữ liệu và chúng đều được sử dụng để làm key (khóa). Khóa chính được sử dụng để xác định mỗi bản ghi trong cơ sở dữ liệu và khóa ngoại dùng để liên kết các bảng dữ liệu với nhau . Các ràng buộc tạo ra với mục đích đảm bảo tính toàn vẹn của dữ liệu. Và chúng ta sẽ đề cập tới các ràng buộc tiếp theo là các ràng buộc liên quan tới giá trị của dữ liệu : Not Null, Unique , Default, Check
1. Ràng buộc Not Null
Trong SQL, ràng buộc NOT NULL là một ràng buộc dữ liệu được sử dụng để xác định một trường không được chứa giá trị null. Nó có thể được áp dụng cho các cột trong bảng hoặc cho các tham số trong các thủ tục lưu trữ hoặc chức năng.
Khi một ràng buộc NOT NULL được áp dụng cho một cột trong bảng, nó đảm bảo rằng tất cả các giá trị trong cột đó đều phải được cung cấp và không được để trống. Nếu một giá trị null được cố ý hoặc vô tình được thêm vào, truy vấn sẽ không hoạt động và sẽ trả về thông báo lỗi. Việc sử dụng ràng buộc NOT NULL trong SQL là cần thiết để đảm bảo tính toàn vẹn dữ liệu và tránh tình huống dữ liệu sai hoặc mất mát.
Ta có thể có các ví dụ sử dụng ràng buộc NOT NULL như để lưu trữ một tài khoản người dùng thì username, password, email, sdt thường là những trường quan trọng và không được để trống.
1.1 Thêm ràng buộc Not Null khi tạo bảng
Mặc định khi các trường của bảng mới cho phép nhận giá trị NULL, còn trong tình huống chúng ta muốn quy định không cho phép nhận giá trị NULL thì cần dùng ràng buộc NOT NULL.
Cách thức để quy định một trường không được phép NULL là chỉ rõ từ khoá NOT NULL ở phần định nghĩa trường
Cú pháp :
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255) NOT NULL,
Age int
);
1.2 Thêm ràng buộc Not Null sau khi tạo bảng
Ta có thể thêm ràng buộc Not Null sau khi tạo bảng với từ khóa ALTER TABLE
Cú pháp :
ALTER TABLE Persons
ALTER COLUMN Age int NOT NULL;
>>> 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
2. Ràng buộc Unique
Ràng buộc unique là một ràng buộc trong cơ sở dữ liệu quan hệ, được sử dụng để đảm bảo rằng giá trị trong một trường dữ liệu nào đó của bảng là duy nhất.
Khi một ràng buộc unique được áp dụng cho một trường dữ liệu, thì không có hai giá trị nào trong trường dữ liệu đó có thể bằng nhau. Điều này đảm bảo tính toàn vẹn của dữ liệu trong cơ sở dữ liệu, và tránh được sự trùng lặp không mong muốn của các giá trị dữ liệu.
Ví dụ, trong bảng khách hàng, nếu ta áp dụng ràng buộc unique cho trường số điện thoại, thì mỗi số điện thoại của khách hàng sẽ là duy nhất. Điều này ngăn chặn khả năng xuất hiện hai khách hàng khác nhau, nhưng có cùng số điện thoại.
Ràng buộc unique cũng có thể được áp dụng cho nhiều trường dữ liệu trong một bảng, đảm bảo rằng tổ hợp các giá trị trong các trường dữ liệu đó là duy nhất.
2.1 Thêm ràng buộc Unique khi tạo bảng
Cú pháp :
MySQL:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
UNIQUE (ID)
);
ID int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int
);
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)
);
2.2 Thêm ràng buộc Unique sau khi tạo bảng
Ta có thể thêm ràng buộc Unique sau khi tạo bảng với từ khóa ALTER TABLE
Cú pháp:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD UNIQUE (ID);
Để đặt tên ràng buộc unique và sử dụng unique với nhiều cột :
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT UC_Person UNIQUE (ID,LastName);
2.3 Xóa ràng buộc Unique
MySQL:
ALTER TABLE Persons
DROP INDEX UC_Person;
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT UC_Person;
3. Ràng buộc Check
Ràng buộc check trong SQL được sử dụng để giới hạn giá trị mà có thể được lưu trữ trong một cột trong bảng. Ràng buộc check có thể được sử dụng để kiểm tra xem giá trị của một cột phù hợp với các điều kiện cụ thể nào đó trước khi được lưu trữ vào cơ sở dữ liệu.
Ta có thể có các ví dụ sử dụng ràng buộc Check như : Trong bảng Employee lưu thông tin nhân viên có thể giới hạn độ tuổi age >18 tuổi, lương nhân viên salary không được nhỏ hơn 200 đô la.
3.1 Thêm ràng buộc Check khi tạo bảng
Cú pháp :
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:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int CHECK (Age>=18)
);
3.2 Thêm ràng buộc Check sau khi đã tạo bảng
Ta có thể thêm ràng buộc Check sau khi đã tạo bảng với từ khóa ALTER
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CHECK (Age>=18);
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT CHK_PersonAge CHECK (Age>=18 AND City=‘Sandnes’);
3.3 Xóa ràng buộc Check
Cú pháp :
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT CHK_PersonAge;
MySQL:
ALTER TABLE Persons
DROP CHECK CHK_PersonAge;
4. Ràng buộc Default
Trong SQL, ràng buộc Default được sử dụng để đặt giá trị mặc định cho một cột trong bảng khi không có giá trị được cung cấp cho cột đó trong quá trình thêm hoặc cập nhật dữ liệu.
Nếu giá trị mặc định được thiết lập cho một cột trong bảng, nó sẽ được sử dụng khi thêm mới một bản ghi và không cung cấp giá trị cho cột đó. Nếu bản ghi được cập nhật và không cung cấp giá trị cho cột, giá trị mặc định cũng sẽ được sử dụng.
Ràng buộc Default có thể được áp dụng cho các loại dữ liệu khác nhau như số nguyên, số thực, kiểu ký tự, ngày tháng. Tuy nhiên, nó cũng có thể gây ra sự nhầm lẫn và sai sót nếu giá trị mặc định không phù hợp với kiểu dữ liệu được định nghĩa cho cột đó.
4.1 Thêm ràng buộc Default khi tạo bảng
Cú pháp :
My SQL / 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) DEFAULT ‘Sandnes’
);
4.2 Thêm ràng buộc Default sau khi tạo bảng
Ta có thể thêm ràng buộc Default sau khi tạo bảng với từ khóa ALTER TABLE
Cú pháp:
MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT ‘Sandnes’;
SQL Server:
ALTER TABLE Persons
ADD CONSTRAINT df_City
DEFAULT ‘Sandnes’ FOR City;
MS Access:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT ‘Sandnes’;
Oracle:
ALTER TABLE Persons
MODIFY City DEFAULT ‘Sandnes’;
4.3 Xóa ràng buộc Default
Cú pháp :
MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT;
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT;
5. Tổng kết về ràng buộc trong SQL
Tóm lại, các ràng buộc đóng một vai trò quan trọng trong việc đảm bảo tính toàn vẹn và nhất quán của dữ liệu trong cơ sở dữ liệu SQL. Chúng giúp duy trì độ chính xác của dữ liệu, ngăn ngừa mất dữ liệu và đảm bảo hiệu suất tối ưu của cơ sở dữ liệu. Các ràng buộc SQL được sử dụng để chỉ định các quy tắc phải tuân theo khi chèn, cập nhật hoặc xóa dữ liệu trong cơ sở dữ liệu. Các ràng buộc này bao gồm khóa chính, khóa ngoại, kiểm tra và các ràng buộc duy nhất, trong số những ràng buộc khác.
Mặc dù các ràng buộc là cần thiết trong cơ sở dữ liệu SQL, nhưng chúng cũng có thể là một yếu tố hạn chế khi thao tác dữ liệu. Một ràng buộc được thiết kế kém có thể khiến việc thực hiện một số thao tác SQL nhất định trở nên khó khăn, dẫn đến hiệu suất truy vấn chậm hơn và các vấn đề về tính toàn vẹn dữ liệu có thể xảy ra. Do đó, điều cần thiết là đạt được sự cân bằng giữa việc sử dụng các ràng buộc và tính linh hoạt mà ứng dụng yêu cầu.
Về bản chất, các ràng buộc giúp thực thi tính toàn vẹn của dữ liệu và nâng cao hiệu quả của cơ sở dữ liệu SQL, nhưng chúng cũng có thể hạn chế thao tác dữ liệu. Do đó, việc xem xét và lập kế hoạch cẩn thận là cần thiết để đạt được kết quả tối ưu trong khi vẫn duy trì hiệu suất cơ sở dữ liệu và tính nhất quán của dữ liệu.
>>> Tìm hiểu ngay các khóa học lập trình của FUNiX tại:
>>> 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
Tài liệu tham khảo
Học viên Phạm Tuấn Vũ
Bình luận (0
)