Contraint (ràng buộc) là một trong những yêu cầu bắt buộc đối với cơ sở dữ liệu quan hệ. Mục đích của việc sử dụng ràng buộc đó là tính chính xác của dữ liệu. Trong nội dung bài viết này smartData sẽ chia sẻ về khái niệm về các loại ràng buộc trong SQL.
Contraint (ràng buộc) là gì?
Contraint là tập các quy tắc được áp dụng trên các bảng, các cột dữ liệu. Nó được dùng để kiểm tra tính hợp lệ và chính xác của dữ liệu đầu vào và còn để đảm bảo tính toàn vẹn của dữ liệu.
Các loại ràng buộc trong sql thường dùng
Để thực hành với các ràng buộc, chúng ta sẽ thực hiện trên cơ sở dữ liệu như sau:
Ràng buộc NOT NULL
Công dụng: Sử dụng để đảm bảo dữ liệu của cột khi được thêm/sửa không nhận giá trị NULL
Cách dùng:
Ta có thể đánh thêm ràng buộc NOT NULL trên cột MaKH ngay từ khi tạo bảng:
CREATE TABLE `khachhang` ( `MaKH` char(10) NOT NULL, `HoTen` varchar(50), `DiaChi` varchar(50), `DienThoai` varchar(50), `NgaySinh` date )
Hoặc ta có thêm ràng buộc khi sửa đổi bảng:
ALTER TABLE KhachHang MODIFY MaKH char(10) NOT NULL;
Ràng buộc DEFAULT
Công dụng: Ràng buộc DEFAULT sẽ được kích hoạt khi giá trị dữ liệu truyền vào cho cột không được nhập hoặc giá trị không xác định.
Cách dùng:
Ta có thể thêm ràng buộc DEFAULT khi tạo bảng
CREATE TABLE `muahang` ( `MaMH` char(10) NOT NULL, `MaKH` char(10) DEFAULT NULL, `MaSP` char(10) DEFAULT NULL, `MaNV` char(10) DEFAULT NULL, `NgayMua` timestamp DEFAULT CURRENT_TIMESTAMP, `TgBaoHanh` int DEFAULT NULL, `soLuong` int DEFAULT NULL )
Hoặc ta có thể thêm ràng buộc DEFAULT khi sửa bảng
ALTER TABLE muahang
ADD CONSTRAINT df_ngay_mua DEFAULT CURRENT_TIMESTAMP FOR NgayMua;
Ràng buộc UNIQUE
Công dụng: Sử dụng để đảm bảo dữ liệu trong cột là duy nhất, giá trị thêm/sửa vào cột này sẽ không được trùng lặp với giá trị đã có trước đó.
Cách dùng:
Tạo ràng buộc UNIQUE trên trường DienThoai khi tạo bảng khachang
CREATE TABLE `khachhang` ( `MaKH` char(10) NOT NULL, `HoTen` varchar(50) NOT NULL, `DiaChi` varchar(50) NOT NULL, `DienThoai` varchar(50) UNIQUE, `NgaySinh` date )
Hoặc sau khi đã tạo bảng, ta muốn thêm ràng buộc UNIQUE
ALTER TABLE khachhang ADD CONSTRAINT unique_dien_thoai UNIQUE (DienThoai);
Ràng buộc PRIMARY KEY
Công dụng: Dùng để thiết lập khoá chính trên một bảng, tập giá trị trên các cột được dùng làm khoá hcinhs phải là duy nhất và không trùng lặp. Về mặt logic thì ta có thể hiểu khi khai báo ràng buộc khoá chính tương đương với việc khai báo ràng buộc NOT NULL và UNIQUE.
Cách dùng:
Để khai báo khoá chính cho một bảng, ta có thể sử dụng 1 trong 3 cách sau đây
Cách 1: Khi tạo bảng định nghĩa khoá chính ngay khi khai báo cột:
CREATE TABLE `khachhang` ( `MaKH` char(10) PRIMARY KEY, `HoTen` varchar(50) NOT NULL, `DiaChi` varchar(50) NOT NULL, `DienThoai` varchar(50) NOT NULL, `NgaySinh` date )
Cách 2: Định nghĩa khoá chính sau khi khai báo cột:
CREATE TABLE `khachhang` ( `MaKH` char(10) NOT NULL, CONSTRAINT pk_ MaKH PRIMARY KEY (MaKH), `HoTen` varchar(50) NOT NULL, `DiaChi` varchar(50) NOT NULL, `DienThoai` varchar(50) NOT NULL, `NgaySinh` date )
Cách 3: Thêm ràng buộc khoá chính khi chỉnh sửa bảng:
ALTER TABLE khachhang ADD CONSTRAINT pk_ MaKH PRIMARY KEY (MaKH);
Ràng buộc FOREIGN KEY
Công dụng: Dùng để thiết lập khoá ngoại trên bảng, giá trị trong cột được đánh khoá ngoại sẽ tham chiếu đến một bảng khác để tạo liên kết giữa 2 bảng và giá trị của cột trong bảng được tham chiếu đến phải là duy nhất và không được NULL.
Cách dùng:
Để khai báo khoá ngoại cho một bảng, ta có thể sử dụng 1 trong 3 cách sau đây
Cách 1: Khi tạo bảng định nghĩa khoá ngoại ngay khi khai báo cột:
CREATE TABLE `muahang` ( `MaMH` char(10) NOT NULL, `MaKH` char(10) DEFAULT NULL FOREIGN KEY REFERENCES khachhang(MaKH), `MaSP` char(10) DEFAULT NULL FOREIGN KEY REFERENCES nhanvien(MaNV) , `MaNV` char(10) DEFAULT NULL FOREIGN KEY REFERENCES sanpham(MaSP), `NgayMua` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `TgBaoHanh` int DEFAULT NULL, `soLuong` int DEFAULT NULL, PRIMARY KEY (`MaMH`), )
Cách 2: Định nghĩa khoá ngoại sau khi khai báo cột:
CREATE TABLE `muahang` ( `MaMH` char(10) NOT NULL, `MaKH` char(10) DEFAULT NULL, CONSTRAINT `fk_maKH` FOREIGN KEY (`MaKH`) REFERENCES `khachhang` (`MaKH`), `MaSP` char(10) DEFAULT NULL, CONSTRAINT `fk_maSP` FOREIGN KEY (`MaSP`) REFERENCES `sanpham` (`MaSP`), `MaNV` char(10) DEFAULT NULL, CONSTRAINT `fk_maNV` FOREIGN KEY (`MaNV`) REFERENCES `nhanvien` (`MaNV`), `NgayMua` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `TgBaoHanh` int DEFAULT NULL, `soLuong` int DEFAULT NULL, PRIMARY KEY (`MaMH`), )
Cách 3: Thêm ràng buộc khoá ngoại khi chỉnh sửa bảng:
ALTER TABLE `muahang` ADD CONSTRAINT `fk_maKH` FOREIGN KEY (`MaKH`) REFERENCES khachhang` (`MaKH`) ADD CONSTRAINT `fk_maSP` FOREIGN KEY (`MaSP`) REFERENCES `sanpham` (`MaSP`) ADD CONSTRAINT `fk_maNV` FOREIGN KEY (`MaNV`) REFERENCES ``nhanvien` (`MaNV`)
Ràng buộc CHECK
Công dụng: Khi dữ liệu đầu vào một cột cần thoả mãn một điều kiện nào đó thì ràng buộc CHECK sẽ giúp ta thực hiện điều này. Đây là hình thức sử dụng phổ biến để kiểm tra tính hợp lệ của dữ liệu.
Cách dùng: Ta sẽ tìm hiểu cách dùng ràng buộc CHECK thông qua các ví dụ cụ thể sau đây
Ví dụ 1: tạo ràng buộc CHECK cho giá trị trường GiaTri trong bảng sanpham phải lớn hơn 0
CREATE TABLE `sanpham` ( `MaSP` char(10) NOT NULL, `TenSP` varchar(50) NOT NULL, `LoaiSP` varchar(50) NOT NULL, `GiaTri` int NOT NULL, PRIMARY KEY (`MaSP`), CHECK(GiaTri > 0) )
Ví dụ 2: Tạo ràng buộc CHECK trường TgBaoHanh trong bảng muahang trong khoảng từ 1 đến 36, sau khi đã tạo bảng muahang
ALTER TABLE muahang ADD CONSTRAINT check_TgBaoHanh CHECK (TgBaoHanh BETWEEN 1 AND 36);
Bỏ kích hoạt và kích hoạt ràng buộc
Công dụng: Khi thao tác trực tiếp với cơ sở dữ liệu có quan hệ phức tạp mà ta chỉ muốn bỏ qua một vài ràng buộc thì ta có thể sử dụng cú pháp để bỏ qua ràng buộc như sau:
ALTER TABLE <tên table chứa ràng buộc> NOCHECK CONSTRAINT <tên ràng buộc>
Ví dụ:
ALTER TABLE muahang NOCHECK CONSTRAINT check_TgBaoHanh
Khi muốn kích hoạt lại ràng buộc ta dùng cú pháp:
ALTER TABLE <tên table chứa ràng buộc> WITH CHECK CONSTRAINT <tên ràng buộc>
Ví dụ:
ALTER TABLE muahang WITH CHECK CONSTRAINT check_TgBaoHanh
Xoá bỏ ràng buộc
Bất kì ràng buộc nào khi không còn mong muốn sử dụng thì ta có thể xoá bằng cú pháp như sau:
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ụ:
ALTER TABLE muahang DROP CONSTRAINT CONSTRAINT check_TgBaoHanh
Kết luận
Như vậy thông qua bài viết trên mình đã giới thiệu với các bạn các ràng buộc của SQL. Các bạn có thể xem thêm những bài viết khác về SQL theo link dưới đây.
Nếu bạn là newbie có thể tham khảo bài viết này để tìm hiểu lộ trình học DA trong 3 tháng của SmartData
Nếu bạn thấy bài viết hay và hữu ích, bạn có thể tham gia các kênh sau của SmartData để nhận được nhiều hơn nữa: