SQLite
 sql >> Baza danych >  >> RDS >> SQLite

Utwórz ograniczenie CHECK w SQLite

W SQLite możesz utworzyć CHECK ograniczenie przez dodanie odpowiedniego kodu w CREATE TABLE oświadczenie podczas tworzenia tabeli.

Jeśli tabela ma CHECK ograniczenie i próbujesz wstawić lub zaktualizować dane, które naruszają CHECK ograniczenie, operacja zakończy się niepowodzeniem z błędem.

Ograniczenie sprawdzania na poziomie kolumny

Oto przykład tworzenia kolumny CHECK na poziomie kolumny ograniczenie.

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

Część, która idzie CHECK (Price > 0) to CHECK ograniczenie.

W tym przypadku określa, że ​​cena musi być większa od zera.

Zobaczmy teraz, co się stanie, jeśli spróbujemy wstawić dane, które naruszają to ograniczenie.

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

Wynik:

Error: CHECK constraint failed: Products

CHECK ograniczenie działało zgodnie z oczekiwaniami.

Otrzymuję ten sam wynik, jeśli próbuję użyć wartości ujemnej.

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

Wynik:

Error: CHECK constraint failed: Products

Ale jeśli zwiększę go do wartości większej od zera, wtedy INSERT operacja się powiodła.

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

SELECT * FROM Products;

Wynik:

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

Ograniczenie kontrolne na poziomie tabeli

CHECK na poziomie tabeli ograniczenie sprawdza dane w całym wierszu, a nie tylko w pojedynczej kolumnie. Innymi słowy, możesz użyć ograniczenia na poziomie tabeli, aby sprawdzić dane z wielu kolumn.

Oto przykład CHECK na poziomie tabeli ograniczenie.

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

Ta tabela jest podobna do pierwszej, z tą różnicą, że dodałem dodatkową kolumnę o nazwie Rabat .

Dla CHECK ograniczenia, teraz sprawdzam, czy cena jest większa niż rabat (nie chcemy, aby rabat był większy niż cena rzeczywista).

Oto, co się stanie, jeśli spróbuję wstawić zniżkę większą niż cena.

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

Wynik:

Error: CHECK constraint failed: Products

Jeśli dostosuję rabat tak, aby był niższy niż cena, zostanie on wstawiony pomyślnie.

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

SELECT * FROM Products;

Wynik:

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. UPUŚĆ TABELĘ, JEŚLI ISTNIEJE w SQLite

  2. Ograniczenia SQLite CHECK

  3. Nie można wstawić rekordu do bazy danych SQLite z usługi Firebase Message Service, gdy aplikacja jest w tle lub w stanie zamkniętym

  4. SQLite - Utwórz tabelę

  5. Sformatuj liczbę jako walutę w SQLite