SQLite
 sql >> база данни >  >> RDS >> SQLite

Създайте ограничение CHECK в SQLite

В SQLite можете да създадете CHECK ограничение чрез добавяне на приложимия код в CREATE TABLE изявление при създаване на таблицата.

Ако таблица има CHECK ограничение върху него и се опитвате да вмъкнете или актуализирате данни, които нарушават CHECK ограничение, операцията ще се провали с грешка.

Ограничение CHECK на ниво колона

Ето пример за създаване на CHECK на ниво колона ограничение.

CREATE TABLE Products( 
    ProductId INTEGER PRIMARY KEY, 
    ProductName, 
    Price 
    CHECK (Price > 0)
);

Частта, която отива CHECK (Price > 0) е CHECK ограничение.

В този случай той посочва, че цената трябва да е по-голяма от нула.

Сега нека видим какво се случва, ако се опитаме да вмъкнем данни, които нарушават това ограничение.

INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 0.00);

Резултат:

Error: CHECK constraint failed: Products

CHECK ограничението работи според очакванията.

Получавам същия резултат, ако се опитам да използвам отрицателна стойност.

INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', -1.00);

Резултат:

Error: CHECK constraint failed: Products

Но ако го увелича до стойност, по-голяма от нула, тогава INSERT операцията е успешна.

INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 1.00);

SELECT * FROM Products;

Резултат:

ProductId   ProductName  Price     
----------  -----------  ----------
1           Blue Widget  1.0       

Ограничение CHECK на ниво таблица

CHECK на ниво таблица constraint проверява данни в целия ред, а не само в една колона. С други думи, можете да използвате ограничение на ниво таблица, за да проверите данни от множество колони.

Ето пример за CHECK на ниво таблица ограничение.

CREATE TABLE Products( 
    ProductId INTEGER PRIMARY KEY, 
    ProductName, 
    Price,
    Discount,
    CHECK (Price >= Discount)
);

Тази таблица е подобна на първата, с изключение на това, че добавих допълнителна колона, наречена Отстъпка .

За CHECK ограничение, сега проверявам дали цената е по-голяма от отстъпката (не искаме възможността да имаме отстъпка, която е по-голяма от действителната цена).

Ето какво се случва, ако се опитам да вмъкна отстъпка, която е по-голяма от цената.

INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 1.00, 2.00);

Резултат:

Error: CHECK constraint failed: Products

Ако коригирам отстъпката така, че да е по-ниска от цената, тя е въведена успешно.

INSERT INTO Products VALUES 
    (NULL, 'Blue Widget', 1.00, 0.50);

SELECT * FROM Products;

Резултат:

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. Как да извлечете деня, месеца и годината от дата в SQLite

  2. Открийте дали дадена стойност съдържа поне една цифрова цифра в SQLite

  3. 3 начина за намиране на редове, които съдържат главни букви в SQLite

  4. грешка при вмъкване на android.database.sqlite.sqliteconstraintexception код за грешка 19 ограничение неуспешно

  5. Таблицата за промяна на миграцията на стая не добавя нова колона и мигрирането се извиква отново и отново