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

Tạo Ràng buộc KIỂM TRA trong SQLite

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)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       

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tốt hơn nên sử dụng Bộ điều hợp con trỏ hoặc Bộ điều hợp Mảng

  2. Làm thế nào để đặt hẹn giờ để gọi một chức năng cứ sau n phút?

  3. Khóa chính xử lý vương quốc Android trong đối tượng quan hệ

  4. Định dạng kết quả SQLite dưới dạng JSON

  5. Android Studio 3.0 canary 1:Lỗi cú pháp SQL