Trong SQLite, bạn có thể tạo CHECK
ràng buộc bằng cách thêm mã áp dụng trong CREATE TABLE
khi tạo bảng.
Nếu một bảng có CHECK
ràng buộc vào nó và bạn cố gắng chèn hoặc cập nhật dữ liệu vi phạm CHECK
ràng buộc, hoạt động sẽ không thành công với một lỗi.
Ràng buộc KIỂM TRA cấp độ cột
Dưới đây là ví dụ về cách tạo CHECK
cấp cột ràng buộc.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price
CHECK (Price > 0)
);
Phần đi CHECK (Price > 0)
là CHECK
ràng buộc.
Trong trường hợp này, nó chỉ định rằng giá phải lớn hơn 0.
Bây giờ, hãy xem điều gì sẽ xảy ra nếu chúng tôi cố gắng chèn dữ liệu vi phạm ràng buộc này.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00);
Kết quả:
Error: CHECK constraint failed: Products
CHECK
ràng buộc hoạt động như mong đợi.
Tôi nhận được kết quả tương tự nếu tôi cố gắng sử dụng giá trị âm.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', -1.00);
Kết quả:
Error: CHECK constraint failed: Products
Nhưng nếu tôi tăng nó lên một giá trị lớn hơn 0, thì INSERT
hoạt động thành công.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00);
SELECT * FROM Products;
Kết quả:
ProductId ProductName Price ---------- ----------- ---------- 1 Blue Widget 1.0
Ràng buộc KIỂM TRA Cấp Bảng
CHECK
cấp bảng ràng buộc kiểm tra dữ liệu trên toàn bộ hàng, thay vì chỉ một cột duy nhất. Nói cách khác, bạn có thể sử dụng ràng buộc cấp bảng để kiểm tra dữ liệu từ nhiều cột.
Đây là ví dụ về CHECK
cấp bảng ràng buộc.
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price,
Discount,
CHECK (Price >= Discount)
);
Bảng này tương tự như bảng đầu tiên, ngoại trừ việc tôi đã thêm một cột bổ sung có tên là Giảm giá .
Đối với CHECK
ràng buộc, tôi hiện đang kiểm tra xem giá có lớn hơn chiết khấu không (chúng tôi không muốn khả năng có chiết khấu lớn hơn giá thực tế).
Đây là những gì sẽ xảy ra nếu tôi cố gắng chèn một khoản chiết khấu lớn hơn giá.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 2.00);
Kết quả:
Error: CHECK constraint failed: Products
Nếu tôi điều chỉnh chiết khấu sao cho thấp hơn giá thì nó đã được chèn thành công.
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 0.50);
SELECT * FROM Products;
Kết quả:
ProductId ProductName Price Discount ---------- ----------- ---------- ---------- 1 Blue Widget 1.0 0.5