Các loại ràng buộc trong SQL Server bao gồm NOT NULL, DEFAULT, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK, INDEX. Mỗi ràng buộc sẽ có những đặc điểm và cách thiết lập riêng. Hãy cùng tìm hiểu về các ràng buộc qua bài viết sau nhé
1. Ràng buộc trong SQL Server là gì?
Ràng buộc (constraint) là những quy tắc được sử dụng trên các cột dữ liệu, trên bảng. Ràng buộc được sử dụng để đảm bảo các điều kiện đầu vào đúng, đảm bảo sự chính xác và sự toàn vẹn của dữ liệu.
Thông thường sẽ có 6 loại ràng buộc trong SQL Server. Mỗi loại này đều là những quy tắc được áp dụng trên các cột dữ liệu.
2. Các loại ràng buộc trong SQL Server
Các loại ràng buộc | Ý nghĩa |
NOT NULL | Khi muốn dữ liệu không nhận giá trị NULL trong cột dữ liệu. |
DEFAULT | Nếu các dữ liệu của cột không xác định hoặc không nhập sẽ được gán cho các giá trị mặc định trước đó đã setting. |
UNIQUE | Đảm bảo dữ liệu không bị lặp lại với các dữ liệu khác. |
PRIMARY KEY (Khóa chính) | Sử dụng cài đặt khóa chính trong bảng, xác định các dữ liệu phải là duy nhất (không trùng lặp) trên các cột được gán lệnh. Việc khai báo yêu cầu các cột phải NOT NULL. |
FOREIGN KEY (Khóa ngoại) | Mỗi hàng/bản ghi được nhận diện duy nhất trong bất kỳ bảng nào. |
CHECK | Đảm bảo các dữ liệu trong cột phải thỏa mãn điều kiện mà bạn đã gán. |
INDEX | Lấy dữ liệu từ Database nhanh nhất |
3. Ví dụ minh họa về các ràng buộc trong SQL Server
-
Thiết lập ràng buộc NOT NULL
Trên cột MaKH của bảng KhachHang
Trường hợp tạo mới table:
CREATE TABLE KhachHang (
MaKH char(10) NOTNULL,
HoTen nvarchar(50),
DiaChi nvarchar(50),
DienThoai varchar(50),
NgaySinh date
);
Trường hợp sửa đổi table:
ALTER TABLE KhachHang MODIFY MaKH char(10) NOTNULL;
-
Thiết lập ràng buộc DEFAULT
Thiết lập tại cột NgayVay lấy giá trị mặc định là ngày hiện tại trong trường hợp ngày vay không được xác định. (Sử dụng function GETDATE() để lấy giá trị ngày hiện tại
Trường hợp tạo mới table:
CREATE TABLE Vay (
MaVay char(10) NOTNULL,
MaKH char(10) NOTNULL,
MaTaiSan char(10) NOTNULL,
MaNV char(10) NOTNULL,
NgayVay date DEFAULT GETDATE(),
ThoiHan int,
LaiSuat float,
SoTienVay money,
NgayHetHan date
);
Trường hợp sửa đổi table:
ALTER TABLE Vay
ADD CONSTRAINT df_ngay_vay DEFAULT GETDATE() FOR NgayVay;
-
Thiết lập ràng buộc FOREIGN KEY (khóa ngoại)
Thiết lập cho cột MaKH trên table Vay
Trường hợp tạo mới table:
Cách 1: định nghĩa trực tiếp khi khai báo cột, không khai báo constraint
CREATE TABLE Vay (
MaVay char(10) NOT NULL,
MaKH char(10) FOREIGN KEY REFERENCES KhachHang(MaKH),
MaTaiSan char(10),
MaNV char(10),
NgayVay date,
ThoiHan int,
LaiSuat float,
SoTienVay money,
NgayHetHan date
);
Cách 2: Định nghĩa constraint
CREATE TABLE Vay (
MaVay char(10) NOTNULL,
MaKH char(10),
CONSTRAINT FOREIGN KEY (MaKH) REFERENCES KhachHang(MaKH),
MaTaiSan char(10),
MaNV char(10),
NgayVay date,
ThoiHan int,
LaiSuat float,
SoTienVay money,
NgayHetHan date
);
Trường hợp sửa đổi table:
ALTER TABLE Vay
ADD CONSTRAINT fk_makh FOREIGN KEY (MaKH) REFERENCES KhachHang(MaKH);
-
Thiết lập ràng buộc PRIMARY KEY (khóa chính)
Thiết lập cho cột MaTaiSan trên table TaiSan
Trường hợp tạo mới table:
Cách 1: định nghĩa trực tiếp khi khai báo cột, không khai báo constraint
CREATE TABLE TaiSan (
MaTaiSan char(10) PRIMARY KEY,
TenTaiSan nvarchar(70) NOTNULL,
LoaiTaiSan nvarchar(30),
GiaTri money
);
Cách 2: Định nghĩa constraint
CREATE TABLE TaiSan (
MaTaiSan char(10) NOT NULL,
CONSTRAINT pk_ma_ts PRIMARY KEY (MaTaiSan),
TenTaiSan nvarchar(70) NOTNULL,
LoaiTaiSan nvarchar(30),
GiaTri money
);
Trường hợp sửa đổi table:
ALTER TABLE TaiSan
ADD CONSTRAINT pk_mats PRIMARY KEY (MaTaiSan);
-
Tạo ràng buộc UNIQUE (duy nhất)
Thiết lập trên trường DienThoai của Bảng KhachHang
Trường hợp tạo mới table:
Cách 1:
CREATE TABLE KhachHang (
MaKH char(10) NOTNULL,
HoTen nvarchar(50) NOTNULL,
DiaChi nvarchar(50) NOTNULL,
DienThoai varchar(50) UNIQUE,
NgaySinh date
);
Cách 2:
CREATE TABLE KhachHang (
MaKH char(10) NOTNULL,
HoTen nvarchar(50) NOTNULL,
DiaChi nvarchar(50) NOTNULL,
DienThoai varchar(50),
CONSTRAINT unique_dien_thoai UNIQUE (DienThoai)
NgaySinh date
);
Trường hợp sửa đổi table:
ALTER TABLE KhachHang
ADD CONSTRAINT unique_dien_thoai UNIQUE (DienThoai);
-
Ví dụ một số ràng buộc CHECK
Tạo ràng buộc check trên trường NgayVaoLam > ‘1/1/1995’ của bảng NhanVien:
ALTER TABLE NhanVien
ADD CONSTRAINT check_ngay_vao_lam CHECK (NgayVaoLam > ‘1995-1-1’);
Tạo ràng buộc check trên trường NgayHetHan phải lớn hơn NgayVay của bảng Vay
ALTER TABLE Vay
ADD CONSTRAINT check_ngayhethan CHECK (NgayHetHan > NgayVay);
Tạo ràng buộc kiểm tra trên trường GiaTri>=0 của bảng TaiSan
ALTER TABLE TaiSan
ADD CONSTRAINT check_gia_tri CHECK (GiaTri > 0);
Tạo ràng buộc kiểm tra trên trường ThoiHan nằm trong khoảng 1 đến 36 tháng của bảng Vay
ALTER TABLE Vay
ADD CONSTRAINT check_thoi_han CHECK (ThoiHan BETWEEN1AND 36);
4. 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ụ, để drop Constraint khóa chính trong bảng NHANVIEN, bạn có thể sử dụng lệnh sau đây.
ALTER TABLE NHANVIEN DROP CONSTRAINT NHANVIEN_PK;
Một số cơ sở dữ liệu có thể cung cấp các phím tắt để drop 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 NHANVIEN DROP PRIMARY KEY;
>>> Xem thêm: SQL là gì? Học SQL để làm gì?