Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Kiểm tra ràng buộc trong SQL

Ràng buộc Kiểm tra trong SQL là quy tắc hoặc tập hợp các quy tắc được sử dụng để giới hạn phạm vi dữ liệu có thể được nhập vào cột bảng. Ràng buộc kiểm tra được sử dụng trên bảng cũng như trên cột. Vì vậy, chúng ta có thể nói, ràng buộc Kiểm tra có thể được tạo ở cấp Cột và Cấp bảng.

Kiểm tra Ràng buộc được áp dụng trên cột và nó sẽ cho phép các giá trị nhất định cho cột này trong khi chèn vào cột. Nếu bạn xác định ràng buộc KIỂM TRA trên một bảng, nó có thể giới hạn các giá trị trong các cột nhất định dựa trên các giá trị trong các cột khác trong hàng. Chúng tôi có thể áp dụng nhiều Ràng buộc Kiểm tra trong một bảng.

Hãy xem một số ví dụ nhất định để hiểu khái niệm Ràng buộc Kiểm tra một cách rõ ràng hơn.

Ràng buộc kiểm tra mức cột

Ràng buộc kiểm tra được xác định ngay sau tên cột, được gọi là Ràng buộc kiểm tra mức cột. Cú pháp của Ràng buộc Kiểm tra Mức Cột như sau,

CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE) CHECK(COLUMN_NAME CONDITION), COLUMN_NAME3 DATATYPE(SIZE));

Ví dụ: chúng tôi sẽ tạo một bảng và xác định ràng buộc kiểm tra mức cột trên một trong các cột sau trong bảng:

CREATE TABLE EMPLOYEES (EMPLOYEEID INT PRIMARY KEY, EMPLOYEE_NAME VARCHAR(50) NOT NULL, SALARY INT CHECK(SALARY > 40000), CITY VARCHAR(20) NOT NULL, DEPARTMENT VARCHAR(30) NOT NULL);

Trong truy vấn trên, chúng tôi đã tạo một bảng có tên Nhân viên và xác định các cột nhất định. Trong bảng Nhân viên, chúng tôi đã chỉ định các ràng buộc kiểm tra đối với tiền lương cột. Bản thân ràng buộc nói rằng cột lương sẽ chỉ chấp nhận những dữ liệu có mức lương của nhân viên lớn hơn 40000; nếu mức lương thấp hơn 40000, lỗi vi phạm ràng buộc sẽ xảy ra.

Để kiểm tra chéo xem ràng buộc KIỂM TRA được xác định trên Lương , chúng tôi sẽ sử dụng truy vấn dưới đây:

SHOW CREATE TABLE EMPLOYEES;

Chúng tôi sẽ chèn một bản ghi vào bảng Nhân viên khi lương của một nhân viên dưới 40000.

INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 38000, 'Pune', 'Java');

Khi chúng tôi chèn một bản ghi nhân viên có mức lương dưới 40000, thông báo lỗi ràng buộc không thành công được hiển thị; tại sao? Bởi vì chúng tôi đã áp dụng ràng buộc Kiểm tra đối với mức lương sẽ chỉ cho phép những hồ sơ có mức lương của nhân viên lớn hơn 40000.

Chúng tôi sẽ chèn một bản ghi vào bảng Nhân viên trong đó lương của một nhân viên lớn hơn 40000.

INSERT INTO EMPLOYEES VALUES (1171101, 'Parag Chordia', 45000, 'Pune', 'Java');

Để kiểm tra chéo xem dữ liệu có được chèn vào bảng hay không, chúng tôi sẽ sử dụng truy vấn dưới đây:

SELECT * FROM EMPLOYEES;

Hồ sơ nhân viên được chèn thành công vào bảng khi chúng tôi nhập Mức lương nhân viên lớn hơn 40000.

Ví dụ 2: Chúng tôi sẽ tạo một bảng và xác định ràng buộc kiểm tra mức cột trên nhiều cột trong bảng.

CREATE TABLE MANAGER(MANAGERID INT PRIMARY KEY, NAME VARCHAR(40) NOT NULL, SALARY INT CHECK(SALARY>=60000), DEPARTMENT VARCHAR(20) NOT NULL CHECK(DEPARTMENT IN('Oracle', 'FMW', 'Testing', 'Java' )));

Chúng tôi đã tạo một Trình quản lý tên bảng trong truy vấn trên và xác định các cột nhất định. Chúng tôi đã chỉ định các ràng buộc kiểm tra trên cột lương trong Trình quản lý bảng. Bản thân ràng buộc nói rằng cột lương sẽ chỉ chấp nhận những dữ liệu có mức lương của người quản lý lớn hơn 60000; nếu mức lương dưới 60000, lỗi vi phạm ràng buộc sẽ xảy ra và Bộ phận của người quản lý là Oracle, FMW, Testing và Java.

Để kiểm tra chéo xem ràng buộc KIỂM TRA có được xác định trên cột Lương và Cột Bộ phận hay không, chúng tôi sẽ sử dụng truy vấn dưới đây:

SHOW CREATE TABLE MANAGER;

Chúng tôi sẽ chèn một bản ghi vào bảng Người quản lý trong đó mức lương của người quản lý dưới 60000 và Bộ phận là Java.

INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 59500, 'Java');

Khi chúng tôi chèn một bản ghi người quản lý có mức lương ít hơn 60000, thông báo lỗi không thể ràng buộc được hiển thị; tại sao? Bởi vì chúng tôi đã áp dụng ràng buộc Kiểm tra đối với mức lương sẽ chỉ cho phép những bản ghi có mức lương của người quản lý lớn hơn 60000. Nhưng không có lỗi ràng buộc nào xảy ra trên cột Bộ phận vì chúng tôi đã chèn những giá trị mà cột được phép chèn,

Chúng tôi sẽ chèn một bản ghi vào bảng Người quản lý trong đó mức lương của người quản lý lớn hơn 60000 và Bộ phận là Java.

INSERT INTO MANAGER VALUES(1, 'Bhavesh Bardiya', 62000, 'Java');

Để kiểm tra chéo xem dữ liệu có được chèn vào bảng hay không, chúng tôi sẽ sử dụng truy vấn dưới đây:

SELECT * FROM MANAGER;

Bản ghi người quản lý được chèn thành công vào bảng khi chúng tôi nhập Mức lương của người quản lý lớn hơn 60000 và tên bộ phận Java.

Ràng buộc kiểm tra mức bảng

Ràng buộc kiểm tra được xác định ở cuối bảng, được gọi là Ràng buộc kiểm tra mức bảng. Cú pháp của Ràng buộc Kiểm tra Mức Bảng như sau,

CREATE TABLE TABLE_NAME(COLUMN_NAME1 DATATYPE(SIZE), COLUMN_NAME2 DATATYPE(SIZE), COLUMN_NAME3 DATATYPE(SIZE), CONSTRAINT CONSTAINT_NAME CHECK(COLUMN_NAME CONDITION));

Ví dụ 1: Chúng tôi sẽ tạo một bảng và xác định ràng buộc kiểm tra mức Bảng trên một trong các cột sau trong bảng.

CREATE TABLE EMPLOYEES (EMPLOYEEID INT PRIMARY KEY, EMPLOYEE_NAME VARCHAR(50) NOT NULL, SALARY INT, CITY VARCHAR(20) NOT NULL, DEPARTMENT VARCHAR(30) NOT NULL, CONSTRAINT salary_constraint CHECK(SALARY > 40000));

Trong truy vấn trên, chúng tôi đã tạo một bảng có tên Nhân viên và xác định các cột nhất định. Trong bảng Nhân viên, chúng tôi đã chỉ định các ràng buộc kiểm tra đối với tiền lương cột. Bản thân ràng buộc nói rằng cột lương sẽ chỉ chấp nhận những dữ liệu có mức lương của nhân viên lớn hơn 40000; nếu mức lương ít hơn 40000 ràng buộc, lỗi vi phạm sẽ xảy ra.

Để kiểm tra chéo xem ràng buộc KIỂM TRA có được xác định trên cột Lương hay không, chúng tôi sẽ sử dụng truy vấn dưới đây:

SHOW CREATE TABLE EMPLOYEES;

Chúng tôi sẽ chèn một bản ghi vào bảng Nhân viên khi lương của một nhân viên dưới 40000.

INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 38000, 'Pune', 'Java');

Khi chúng tôi chèn một bản ghi nhân viên có mức lương dưới 40000, thông báo lỗi ràng buộc không thành công được hiển thị; tại sao? Bởi vì chúng tôi đã áp dụng ràng buộc Kiểm tra đối với mức lương sẽ chỉ cho phép những hồ sơ có mức lương của nhân viên lớn hơn 40000.

Chúng tôi sẽ chèn một bản ghi vào bảng Nhân viên trong đó lương của một nhân viên lớn hơn 40000.

INSERT INTO EMPLOYEES VALUES (1171101, 'Naman Sharma', 45000, 'Pune', 'Java');

Để kiểm tra chéo xem dữ liệu có được chèn vào bảng hay không, chúng tôi sẽ sử dụng truy vấn dưới đây:

SELECT * FROM EMPLOYEES;

Hồ sơ nhân viên được chèn thành công vào bảng khi chúng tôi nhập Mức lương nhân viên lớn hơn 40000.

Ví dụ 2: Chúng tôi sẽ tạo một bảng và xác định ràng buộc kiểm tra mức cột trên nhiều cột trong bảng.

CREATE TABLE MANAGER (MANAGERID INT PRIMARY KEY, NAME VARCHAR(40) NOT NULL, SALARY INT, DEPARTMENT VARCHAR(40) NOT NULL, CONSTRAINT SALARY_CONST CHECK(SALARY>60000), CONSTRAINT DEPT_CONST CHECK(DEPARTMENT IN(‘'Oracle', 'FMW', ‘Java’, 'Testing')));

Chúng tôi đã tạo tên bảng Người quản lý trong truy vấn trên và xác định các cột nhất định. Chúng tôi đã chỉ định các ràng buộc kiểm tra đối với tiền lương cột trong Trình quản lý bảng. Bản thân ràng buộc nói rằng cột lương sẽ chỉ chấp nhận những dữ liệu có mức lương của người quản lý lớn hơn 60000; nếu mức lương dưới 60000, lỗi vi phạm ràng buộc sẽ xảy ra và Bộ phận của người quản lý là Oracle, FMW, Testing và Java.

Để kiểm tra chéo xem ràng buộc KIỂM TRA có được xác định trên cột Lương và Cột Bộ phận hay không, chúng tôi sẽ sử dụng truy vấn dưới đây:

SHOW CREATE TABLE MANAGER;

Chúng tôi sẽ chèn một bản ghi vào bảng Người quản lý trong đó mức lương của người quản lý dưới 60000 và Bộ phận là Java.

INSERT INTO MANAGER VALUES(1, 'Surili Jain', 59500, 'Java');

Khi chúng tôi chèn một bản ghi người quản lý có mức lương ít hơn 60000, thông báo lỗi không thể ràng buộc được hiển thị; tại sao? Bởi vì chúng tôi đã áp dụng ràng buộc Kiểm tra đối với mức lương sẽ chỉ cho phép những bản ghi có mức lương của người quản lý lớn hơn 60000. Nhưng không có lỗi ràng buộc nào xảy ra trên cột Bộ phận vì chúng tôi đã chèn những giá trị mà cột được phép chèn,

Chúng tôi sẽ chèn một bản ghi vào bảng Người quản lý trong đó mức lương của người quản lý lớn hơn 60000 và Bộ phận là Java.

INSERT INTO MANAGER VALUES(1, 'Surili Jain', 62500, 'Java');

Để kiểm tra chéo xem dữ liệu có được chèn vào bảng hay không, chúng tôi sẽ sử dụng truy vấn dưới đây:

SELECT * FROM MANAGER;

Bản ghi người quản lý được chèn thành công vào bảng khi chúng tôi nhập Mức lương của người quản lý lớn hơn 60000 và tên bộ phận Java.

Kiểm tra ràng buộc bằng cách sử dụng Alter

Chúng tôi đã tạo một bảng và quên thêm CHECK CONSTRAINT trong khi tạo bảng, sau đó chúng tôi cần thêm CHECK CONSTRAINT trong bảng. Trong những trường hợp như vậy, chúng tôi sẽ sử dụng lệnh ALTER để áp dụng CHECK CONSTRAINT trên bảng hiện có.

Cú pháp của Kiểm tra Ràng buộc bằng cách sử dụng Alter như sau,

ALTER TABLE TABLE_NAME ADD CONSTRAINT CONSTRAINT_NAME CHECK (COLUMN_NAME CONDITION);

Ví dụ 1: Giả sử chúng tôi đã tạo Nhân viên bảng mà không cần thêm Ràng buộc Kiểm tra. Bây giờ chúng ta muốn thêm Kiểm tra Ràng buộc trên một trong các cột. Sau đó, chúng tôi sẽ sử dụng truy vấn dưới đây:

ALTER TABLE EMPLOYEES ADD CONSTRAINT Sal_Constraint CHECK (SALARY > 35000);  

Để kiểm tra chéo xem ràng buộc KIỂM TRA được xác định trên Lương , chúng tôi sẽ sử dụng truy vấn dưới đây:

SHOW CREATE TABLE EMPLOYEES;

Chúng tôi sẽ chèn một bản ghi vào bảng Nhân viên khi lương của một nhân viên dưới 35000.

INSERT INTO EMPLOYEES VALUES (1001, 'Abhinav Patil', 30000, 'Mumbai', 'Testing');

Khi chúng tôi chèn một bản ghi nhân viên có mức lương thấp hơn 35000, thông báo lỗi ràng buộc không thành công được hiển thị; tại sao? Bởi vì chúng tôi đã áp dụng ràng buộc Kiểm tra đối với mức lương sẽ chỉ cho phép những hồ sơ có mức lương nhân viên lớn hơn 35000.

Ví dụ 2: Giả sử chúng tôi đã tạo Nhân viên bảng mà không cần thêm Ràng buộc Kiểm tra. Bây giờ chúng ta muốn thêm Kiểm tra Ràng buộc trên một trong các cột. Sau đó, chúng tôi sẽ sử dụng truy vấn dưới đây:

ALTER TABLE EMPLOYEES ADD CONSTRAINT City_Constraint CHECK (CITY IN ('Mumbai', 'Pune', 'Bangalore', 'Chennai'));

Để kiểm tra chéo xem ràng buộc KIỂM TRA được xác định trên Thành phố , chúng tôi sẽ sử dụng truy vấn dưới đây:

SHOW CREATE TABLE EMPLOYEES;

Chúng tôi sẽ chèn một bản ghi vào bảng Nhân viên trong đó Thành phố của một nhân viên là Jaipur.

SHOW CREATE TABLE EMPLOYEES;

Khi chúng tôi chèn một bản ghi nhân viên có tên thành phố là Jaipur, thông báo lỗi không thể ràng buộc được hiển thị; tại sao? Bởi vì chúng tôi đã áp dụng ràng buộc Kiểm tra đối với Thành phố sẽ chỉ cho phép những bản ghi có tên thành phố sẽ là 'Mumbai', 'Pune', 'Bangalore' hoặc 'Chennai'.

Ràng buộc Kiểm tra Thả

Giả sử chúng ta đã xác định một CHECK CONSTRAINT trên các cột của bảng. Sau đó, chúng tôi muốn xóa CONSTRAINT đó khỏi cột. Sau đó, chúng tôi sẽ sử dụng lệnh ALTER để thả CHECK CONSTRAINT.

Cú pháp của Ràng buộc Kiểm tra Thả như sau,

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;

Ví dụ 1: Giả sử chúng ta đã xác định Ràng buộc Kiểm tra trên một trong các cột của bảng Nhân viên. Sau đó, chúng tôi quyết định bỏ ràng buộc đó.

Trước tiên, chúng tôi sẽ kiểm tra ràng buộc đã tạo, để sử dụng truy vấn sau:

SHOW CREATE TABLE EMPLOYEES;

Chúng tôi sẽ viết truy vấn dưới đây để loại bỏ ràng buộc có tên 'City_Constraint'.

ALTER TABLE EMPLOYEES DROP CONSTRAINT City_Constraint;

Chúng tôi sẽ sử dụng lại truy vấn SHOW CREATE TABLE để kiểm tra xem ràng buộc đã được gỡ bỏ thành công chưa.

SHOW CREATE TABLE EMPLOYEES;

Ví dụ 2: Giả sử chúng ta đã xác định Ràng buộc Kiểm tra trên một trong các cột của Bảng Người quản lý. Sau đó, chúng tôi quyết định bỏ ràng buộc đó.

Trước tiên, chúng tôi sẽ kiểm tra ràng buộc đã tạo, để sử dụng truy vấn sau:

SHOW CREATE TABLE MANAGER;

Chúng tôi sẽ viết truy vấn dưới đây để loại bỏ ràng buộc có tên 'SALARY_CONST'.

ALTER TABLE MANAGER DROP CONSTRAINT SALARY_CONST;

Chúng tôi sẽ sử dụng lại truy vấn SHOW CREATE TABLE để kiểm tra xem ràng buộc đã được gỡ bỏ thành công chưa.

SHOW CREATE TABLE MANAGER;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mô hình dữ liệu cho ứng dụng đặt lịch hẹn khám bệnh

  2. Giảm thiểu tác động của việc mở rộng cột IDENTITY - phần 4

  3. Phân tích dữ liệu lớn với công cụ Microsoft Azure

  4. Bắt lửa với Apache Spark - Phần 1

  5. Tất cả những gì bạn cần biết về các tiêu chuẩn mã hóa cho các truy vấn SQL