Ràng buộc kiểm tra

Ràng buộc kiểm tra (hay ràng buộc CHECK) là một loại ràng buộc tính toàn vẹn trong SQL, ràng buộc này chỉ rõ những yêu cầu mà mỗi hàng trong một bảng của cơ sở dữ liệu phải đáp ứng. Ràng buộc phải là một vị từ, tức là một biểu thức hoặc điều kiện trả về kết quả cụ thể. Nó có thể tham chiếu đến một hoặc nhiều cột của bảng. Kết quả của vị từ có thể là codice_1, codice_2 hoặc codice_3 (nếu có giá trị NULL). Khi vị từ được đánh giá thành thì ràng buộc bị vi phạm và thành thì không bị vi phạm. Nếu vị từ được đánh giá thành codice_3, thì ràng buộc sẽ không bị vi phạm và hàng đó có thể được chèn hoặc cập nhật vào trong bảng. Điều này trái ngược với các vị từ trong mệnh đề codice_5 xuất hiện trong các câu lệnh codice_6 hoặc codice_7.

Ví dụ, trong một bảng về sản phẩm, người ta có thể thêm một ràng buộc kiểm tra để ràng buộc giá cả và số lượng của một sản phẩm là một giá trị không âm:

Nếu không có những ràng buộc này, giá cả có thể bị âm (−100000 ₫) và số lượng cũng có thể bị âm (−3 sản phẩm).

Ràng buộc kiểm tra được dùng để đảm bảo tính hợp lệ của dữ liệu trong cơ sở dữ liệu và để cung cấp sự toàn vẹn dữ liệu. Nếu các ràng buộc này được sử dụng ở cấp độ cơ sở dữ liệu, các ứng dụng sử dụng cơ sở dữ liệu sẽ không thể thêm dữ liệu không hợp lệ hoặc sửa đổi dữ liệu từ hợp lệ thành không hợp lệ, kể cả khi bản thân ứng dụng đó coi dữ liệu đó là hợp lệ hay không.

== Khai báo ==
Mỗi ràng buộc kiểm tra phải được khai báo bằng câu lệnh codice_8 hoặc codice_9 với cú pháp sau:

CREATE TABLE ten_bang (
)

CREATE TABLE ten_bang (
)

Nếu ràng buộc kiểm tra chỉ ảnh hưởng đến một cột duy nhất, nó có thể được khai báo trực tiếp trong phần khai báo cột.
ALTER TABLE ten_bang

== Ràng buộc NOT NULL ==
Ràng buộc codice_10 tương đương về mặt chức năng với ràng buộc kiểm tra có sử dụng vị từ codice_11 như sau:
Một số hệ quản trị cơ sở dữ liệu quan hệ, chẳng hạn như PostgreSQL, có thể tối ưu hóa hiệu năng nếu như dùng cú pháp codice_10 thay vì sử dụng cú pháp codice_13 ở trên.

== Hạn chế chung ==
Hầu hết các hệ quản lý cơ sở dữ liệu chỉ cho phép ràng buộc kiểm tra đối với một hàng duy nhất. Các ràng buộc này được truy cập vào các hằng và các hàm tất định (deterministic), nhưng không được truy cập vào dữ liệu trong các bảng khác hoặc dữ liệu nằm ngoài tầm của giao tác (transaction) hiện tại do tính cô lập của giao tác.

Những ràng buộc như vậy không hẳn là "ràng buộc kiểm tra bảng" mà chỉ là "ràng buộc kiểm tra hàng". Vì những ràng buộc này thường chỉ được xác minh sau khi một hàng được cập nhật trực tiếp (vì lý do hiệu năng) và thường được cài đặt dưới dạng các bộ kích hoạt (trigger) codice_14 hoặc codice_7 ngầm định, nên các ràng buộc toàn vẹn có thể bị các hành động gián tiếp làm vi phạm nếu không có những hạn chế này. Hơn nữa, những sửa đổi hợp lệ đối với các bản ghi này sau đó sẽ bị ràng buộc codice_13 này cản lại. Một số ví dụ về những ràng buộc nguy hiểm bao gồm:

Có thể sử dụng các bộ kích hoạt do người dùng định nghĩa để khắc phục những hạn chế này. Mặc dù giống nhau về cách cài đặt, nhưng về mặt ngữ nghĩa thì rõ ràng rằng các bộ kích hoạt sẽ chỉ được kích hoạt khi bảng được sửa đổi trực tiếp. Khi đó, người thiết kế cơ sở dữ liệu có trách nhiệm xử lý các thay đổi quan trọng, gián tiếp trong các bảng khác. Mặt khác, các ràng buộc được thiết kế sao cho nó "luôn đúng", bất kể là do người thiết kế không lường trước hay là do hành động của người dùng.