Ràng buộc (Constraint) là các qui tắc được áp đặt cho các cột dữ liệu trên table. Chúng được sử dụng để giới hạn kiểu dữ liệu nhập vào một bảng. Điều này đảm bảo tính chính xác và tính đáng tin cậy cho dữ liệu trong Database.
Ràng buộc (Constraint) có thể là column level hoặc table level. Ràng buộc cấp độ cột chỉ được áp dụng cho các cột, trong khi ràng buộc cấp độ bảng được áp dụng cho toàn bộ table.
Dưới đây là các ràng buộc có sẵn và được sử dụng phổ biến trong SQL. Các ràng buộc này đã được trình bày trong Các khái niệm RDBMS trong SQL, nhưng trong chương này, bạn cần thiết xem lại nó để hiểu rõ hơn vấn đề.
- Ràng buộc NOT NULL trong SQL: Bảo đảm một cột không thể có giá trị NULL.
- Ràng buộc DEFAULT trong SQL: Cung cấp một giá trị mặc định cho cột khi không được xác định.
- Ràng buộc UNIQUE trong SQL: Bảo đảm tất cả giá trị trong một cột là khác nhau.
- Ràng buộc PRIMARY Key trong SQL: Mỗi hàng/bản ghi được nhận diện một cách duy nhất trong một bảng.
- Ràng buộc FOREIGN Key trong SQL: Mỗi hàng/bản ghi được nhận diện một cách duy nhất trong bất kỳ bảng nào.
- Ràng buộc CHECK trong SQL: Bảo đảm tất cả giá trị trong một cột thỏa mãn các điều kiện nào đó.
- Ràng buộc INDEX trong SQL: Sử dụng để tạo và lấy dữ liệu từ Database một cách nhanh chóng.
Các ràng buộc có thể được xác định khi một bảng được tạo với lệnh CREATE TABLE hoặc bạn có thể sử dụng lệnh ALTER TABLE để tạo các ràng buộc ngay sau khi bảng được tạo.
Xóa ràng buộc trong SQL
Bất kỳ ràng buộc nào bạn đã định nghĩa cũng có thể bị xóa bởi sử dụng lệnh ALTER TABLE với tùy chọn DROP TABLE.
Ví dụ, để xóa ràng buộc khóa chính (primary key) trong bảng EMPLOYEES, bạn có thể sử dụng lệnh sau:
ALTER TABLE EMPLOYEES DROP CONSTRAINT EMPLOYEES_PK;
Một số Database có thể cung cấp phím tắt để xóa các ràng buộc cụ thể. Ví dụ, để xóa 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:
ALTER TABLE EMPLOYEES DROP PRIMARY KEY;
Một số Database cho phép bạn khả năng vô hiệu hóa các ràng buộc. Thay vì xóa vĩnh viễn một ràng buộc từ Database, bạn có thể muốn vô hiệu hóa tạm thời ràng buộc đó, và sau đó kích hoạt lại nó.
Ràng buộc toàn vẹn trong SQL
Ràng buộc toàn vẹn (integrity constraint) được sử dụng để đảm bảo tính chính xác và tính nhất quán của dữ liệu trong một Relational Database. Toàn vẹn dữ liệu được xử lý trong một Cơ sở dữ liệu quan hệ thông qua khái niệm của toàn vẹn tham chiếu (referential integrity - RI).
Theo mặc định, một cột có thể giữ các giá trị NULL. Nếu bạn không muốn một cột mà có một giá trị NULL, thì bạn cần định nghĩa ràng buộc NOT NULL trên cột này, để xác định rằng bây giờ NULL là không được chấp nhận bởi cột đó.
Một NULL tương tự như không có dữ liệu nào, nó biểu diễn một dữ liệu không biết.
Ví dụ
Ví dụ sau tạo một bảng mới với tên SINHVIEN và thêm 5 cột, 3 trong số đó là ID, TEN và TUOI được xác định là không chấp nhận giá trị NULL.
CREATE TABLE SINHVIEN( ID INT NOT NULL, TEN VARCHAR (20) NOT NULL, TUOI INT NOT NULL, KHOAHOC CHAR (25) , HOCPHI DECIMAL (18, 2), PRIMARY KEY (ID) );
Nếu bảng này đã được tạo, thì sau đó, để thêm một ràng buộc NOT NULL cho cột HOCPHI trong Oracle và MySQL, bạn sẽ viết lệnh tương tự như sau:
ALTER TABLE SINHVIEN MODIFY HOCPHI DECIMAL (18, 2) NOT NULL;
Ràng buộc DEFAULT trong SQL cung cấp một giá trị mặc định cho một cột khi lệnh INSERT INTO không cung cấp một giá trị cụ thể.
Ví dụ
Ví dụ sau tạo bảng mới với tên SINHVIEN và thêm 5 cột. Ở đây, cột HOCPHI được thiết lập là 3500000 theo mặc định, vì thế, trong trường hợp lệnh INSERT INTO không cung cấp một giá trị cho cột này, thì theo mặc định, cột này sẽ được thiết lập là 3500000.
CREATE TABLE SINHVIEN( ID INT NOT NULL, TEN VARCHAR (20) NOT NULL, TUOI INT NOT NULL, KHOAHOC CHAR (25) , HOCPHI DECIMAL (18, 2) DEFAULT 3500000, PRIMARY KEY (ID) );
Nếu bảng đã được tạo, thì để thêm một ràng buộc DEFAULT cho cột HOCPHI, bạn sẽ viết lệnh như sau:
ALTER TABLE SINHVIEN MODIFY HOCPHI DECIMAL (18, 2) DEFAULT 3500000;
Xóa ràng buộc DEFAULT trong SQL
Để xóa một ràng buộc DEFAULT, bạn sử dụng lệnh SQL sau:
ALTER TABLE SINHVIEN ALTER COLUMN HOCPHI DROP DEFAULT;
Ràng buộc UNIQUE trong SQL ngăn cản việc hai bản ghi có các giá trị đồng nhất trong một cột cụ thể. Ví dụ, trong bảng SINHVIEN, bạn có thể muốn ngăn cản việc hai hoặc nhiều người có cùng tuổi.
Ví dụ
Ví dụ sau tạo bảng mới với tên SINHVIEN và thêm 5 cột. Ở đây, cột TUOI được thiết lập là UNIQUE, để bạn không muốn hai bản ghi có cùng tuổi.
CREATE TABLE SINHVIEN( ID INT NOT NULL, TEN VARCHAR (20) NOT NULL, TUOI INT NOT NULL UNIQUE, KHOAHOC CHAR (25) , HOCPHI DECIMAL (18, 2), PRIMARY KEY (ID) );
Nếu bảng đã được tạo, thì để thêm một ràng buộc UNIQUE cho cột TUOI, bạn sẽ viết lệnh như sau:
ALTER TABLE SINHVIEN MODIFY TUOI INT NOT NULL UNIQUE;
Bạn cũng có thể sử dụng cú pháp sau, mà hỗ trợ việc đặt tên ràng buộc trong nhiều cột.
ALTER TABLE SINHVIEN ADD CONSTRAINT myUniqueConstraint UNIQUE(TUOI, HOCPHI);
Xóa một ràng buộc UNIQUE trong SQL
Để xóa một ràng buộc UNIQUE trong SQL, bạn sử dụng:
ALTER TABLE SINHVIEN DROP CONSTRAINT myUniqueConstraint;
Nếu bạn đang sử dụng MySQL, thì bạn sử dụng cú pháp sau:
ALTER TABLE SINHVIEN DROP INDEX myUniqueConstraint;