Các loại ràng buộc trong SQL Server

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.

Ràng buộc trong SQL Server là gì?

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

Các loại ràng buộc trong SQL Server

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;

Ví dụ minh họa về các ràng buộc trong SQL Server

  • 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;

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

>>> Xem thêm: SQL là gì? Học SQL để làm gì?

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *