CONSTRAINT (RÀNG BUỘC) trong SQL Server

13042 lượt xem

CONSTRAINT là một trong những quy tắc áp dụng trong SQL Server. Có nhiều loại CONSTRAINT khác nhau. Cùng tôi tìm hiểu kỹ hơn nhé.

1. CONSTRAINT trong SQL là gì?

Constraint đượ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 RÀNG BUỘC có sẵn trong SQL Server

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

Những lệnh ràng buộc này có thể được xác định khi tạo một bảng bởi CREATE TABLE hoặc ALTER TABLE giúp bạn tạo ra các ràng buộc trước khi tạo bảng.

2.1 Một số lưu ý khác đối với RÀNG BUỘC CHECK

  • Không thể định trong VIEW
  • Bạn chỉ có thể tham chiếu các dữ liệu ở bảng đã khai báo ràng buộc. Còn lại không thể tham ở bảng khác, nếu muốn phải dùng Function để trích xuất dữ liệu.
  • Trong định nghĩa điều kiện không thể sử dụng các truy vấn con (Subquery)

2.2  Hướng dẫn sử dụng các ràng buộc (constraints)

Thuật toán quản lý Vay có thế chấp tài sản đơn giản thể hiện qua sơ đồ như sau:

NOT NULL

Nếu tạo mới bảng:

CREATE TABLE KhachHang (

MaKH char(10) NOT NULL,

HoTen nvarchar(50),

DiaChi nvarchar(50),

DienThoai varchar(50),

NgaySinh date

);

Nếu sửa bảng:

ALTER TABLE KhachHang MODIFY MaKH char(10) NOT NULL;

Sử dụng lệnh DEFAULT

Cột NgayVay lấy giá trị mặc định là ngày hiện tại nếu ngày vay không thể xác định. Sử dụng function GETDATE() để lấy giá trị ngày hiện tại.

Nếu tạo mới bảng:

CREATE TABLE Vay (

MaVay char(10) NOT NULL,

MaKH char(10) NOT NULL,

MaTaiSan char(10) NOT NULL,

MaNV char(10) NOT NULL,

NgayVay date DEFAULT GETDATE(),

ThoiHan int,

LaiSuat float,

SoTienVay money,

NgayHetHan date

);

Nếu sửa bảng

ALTER TABLE Vay

ADD CONSTRAINT df_ngay_vay DEFAULT GETDATE() FOR NgayVay;

Sử dụng lệnh PRIMARY KEY (khóa chính)

Nếu bạn sử dụng lệnh này cho MaTaiSan trên bảng MATAISAN

Tạo mới bảng:

Cách 1: Không khai báo Constraint

CREATE TABLE TaiSan (

MaTaiSan char(10) PRIMARY KEY,

TenTaiSan nvarchar(70) NOT NULL,

LoaiTaiSan nvarchar(30),

GiaTri money

);

Cách 2: Khai báo Constraint

CREATE TABLE TaiSan (

MaTaiSan char(10) NOT NULL,

CONSTRAINT pk_ma_ts PRIMARY KEY (MaTaiSan),

TenTaiSan nvarchar(70) NOT NULL,

LoaiTaiSan nvarchar(30),

GiaTri money

);

Sửa đổi bảng:

ALTER TABLE TaiSan

ADD CONSTRAINT pk_mats PRIMARY KEY (MaTaiSan);

Sử dụng FOREIGN KEY (khóa ngoại)

Lệnh ràng buộc ví dụ được sử dụng trên bảng VAY cho cột MaKH

Tạo mới bảng

Cách 1: 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: Khai báo constraint

CREATE TABLE Vay (

MaVay char(10) NOT NULL,

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

);

Sửa đổi bảng

ALTER TABLE Vay

ADD CONSTRAINT fk_makh FOREIGN KEY (MaKH) REFERENCES KhachHang(MaKH);

Sử dụng lệnh UNIQUE

Áp dụng trên bảng KhachHang cho trường DienThoai

Tạo mới bảng

Cách 1:

CREATE TABLE KhachHang (

MaKH char(10) NOT NULL,

HoTen nvarchar(50) NOT NULL,

DiaChi nvarchar(50) NOT NULL,

DienThoai varchar(50) UNIQUE,

NgaySinh date

);

Cách 2:

CREATE TABLE KhachHang (

MaKH char(10) NOT NULL,

HoTen nvarchar(50) NOT NULL,

DiaChi nvarchar(50) NOT NULL,

DienThoai varchar(50),

CONSTRAINT unique_dien_thoai UNIQUE (DienThoai)

NgaySinh date

);

Sửa đổi bảng:

ALTER TABLE KhachHang

ADD CONSTRAINT unique_dien_thoai UNIQUE (DienThoai);

Sử dụng lệnh Check constraint trong sql

Tao Constraint Check trên trường NgayVaoLam > ‘1/1/1997’ của bảng NhanVien.

ALTER TABLE NhanVien

ADD CONSTRAINT check_ngay_vao_lam CHECK (NgayVaoLam > '1997-1-1');

Tao Constraint 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);

Tao Constraint kiểm tra trên trường GiaTri>=2 của bảng TaiSan

ALTER TABLE TaiSan

ADD CONSTRAINT check_gia_tri CHECK (GiaTri > 2);

Tao Constraint kiểm tra trên trường ThoiHan khoảng 1 đến 12 tháng của bảng Vay

ALTER TABLE Vay

ADD CONSTRAINT check_thoi_han CHECK (ThoiHan BETWEEN 1 AND 12);

3. Xóa RÀNG BUỘC trong SQL

Lệnh xóa bỏ

ALTER TABLE <tên table chứa ràng buộc>

DROP CONSTRAINT <tên ràng buộc  muốn xóa bỏ>

Ví dụ: Xóa bỏ kiểm tra trên trường ThoiHan từ 1-12 tháng gán ở trên

ALTER TABLE Vay

DROP CONSTRAINT check_thoi_han CHECK (ThoiHan BETWEEN 1 AND 12);

4. Bỏ kích hoạt và kích hoạt CONSTRAINT

Đôi khi bạn không muốn lệnh CONSTRAINT hoạt động nhưng lại không muốn xóa chúng. Đừng lo lắng vì đã có lệnh bỏ và kích hoạt lại lệnh.

Câu lệnh là:

ALTER TABLE <tên table chứa ràng buộc>

NOCHECK CONSTRAINT <tên ràng buộc>

Ví dụ: Vô hiệu hóa Constraint Check trên trường NgayHetHan phải lớn hơn NgayVay của bảng Vay

ALTER TABLE Vay

NOCHECK CONSTRAINT check_ngayhethan CHECK (NgayHetHan > NgayVay);

Trường hợp muốn kích hoạt lại ràng buộc, bạn sử dụng lệnh sau:

ALTER TABLE <tên table chứa ràng buộc>

WITH CHECK CHECK CONSTRAINT <tên ràng buộc>

Ví dụ: Kích hoạt lại ví dụ trên

ALTER TABLE Vay

WITH CHECK CHECK CONSTRAINT check_ngayhethan CHECK (NgayHetHan > NgayVay);

5. RÀNG BUỘC toàn vẹn trong SQL Server

Integrity constraint (ràng buộc toàn vẹn) chỉ nên sử dụng khi bạn muốn đảm bảo 100% sự chính xác và tính nhất quán trong các dữ liệu của Cơ sở dữ liệu.

Integrity constraint được sử dụng thông qua khái niệm toàn vẹn tham chiếu (referential integrity – RI)

Như vậy là tôi đã hướng dẫn bạn add constraint trong sql. Khá đơn giản thôi, nhưng bạn cần cố gắng thực hiện mỗi ngày. Đón chờ các bài viết tiếp theo của tôi nữa nhé.