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. Show 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ếnDưới đây là một số các ràng buộc phổ biến nhất được sử dụng trong SQL.
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 NullNế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 ID và NAME Not Null. CREATE TABLE Student ( ID int(6) NOT NULL, NAME varchar(10) NOT NULL, ADDRESS varchar(20) );UNIQUEUNIQUE 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 KEYPrimary 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 KEYDù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) )CHECKSử 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) );DEFAULTConstraint 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/ Bài viết này mình sẽ chia sẽ một số kiến thức về cách định nghĩa ràng buộc trong MS SQL Server. Constraint là gì?Constraint là những quy tắc được áp dụng trên các cột dữ liệu, trên bảng. Được sử dụng để kiểm tra tính hợp lệ của dữ liệu vào, đảm bảo tính chính xác, tính toàn vẹn của dữ liệu. Các loại constraint phổ biến
Một số lưu ý đối với ràng buộc CHECK:
Ví dụ cụ thểCho bài toán quản lý Vay có thế chấp tài sản đơn giản thể hiện qua sơ đồ mức vật lý như sau: 1. Thiết lập ràng buộc NOT NULL trên cột MaKH của bảng KhachHang
2. Thiết lập ràng buộc DEFAULT 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)
3. Thiết lập ràng buộc PRIMARY KEY (khóa chính) cho cột MaTaiSan trên table TaiSan
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) NOT NULL, 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) NOT NULL, LoaiTaiSan nvarchar(30), GiaTri money );
4. Thiết lập ràng buộc FOREIGN KEY (khóa ngoại) cho cột MaKH trên table Vay
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) 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 );
5. Tạo ràng buộc UNIQUE (duy nhất) trên trường DienThoai của Bảng KhachHang
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 );
Lưu ý:Nên sử dụng Cách 2 trong ở trên mình đưa ra, hay chính là việc chúng ta nên sử dụng kiểu khai báo có đặt tên ràng buộc thông qua khai báo bằng lệnh CONSTRAINT. Vì với cách này bạn sẽ dễ dàng xóa bỏ, sửa đổi, bỏ kích hoạt, kích hoạt vì nó xác định qua tên của ràng buộc 6. Ví dụ một số ràng buộc CHECK
Xóa bỏ constraintCú pháp 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ỏ ràng buộc check_ngay_vao_lam trong table NhanVien đã khai báo ở mục 6. ALTER TABLE NhanVien DROP CONSTRAINT check_ngay_vao_lamBỏ kích hoạt và kích hoạt constraintĐôi khi bạn muốn bỏ việc check ràng buộc trong một số trường hợp nhưng lại không muốn xóa bỏ đi ràng buộc đã khai báo. Trường hợp này chúng ta có thể chọn tính năng bỏ kích hoạt. Cú pháp bỏ kích hoạt: 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 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 NOCHECK CONSTRAINT check_ngayhethanTrường hợp muốn kích hoạt lại ràng buộc, chúng ta sử dụng cú pháp sau: ALTER TABLE <tên table chứa ràng buộc> WITH CHECK CHECK CONSTRAINT <tên ràng buộc>Ví dụ: Vô hiệu hóa 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 WITH CHECK CHECK CONSTRAINT check_ngayhethanKết luậnTrên đây là những gì mình tổng hợp và tự đưa ra ví dụ minh họa cho từng phần. Hi vọng sẽ giúp ích cho các bạn trong quá trình sử dụng constraint trong câu lệnh sql. |