SQLite
 sql >> Base de données >  >> RDS >> SQLite

Créer une contrainte CHECK dans SQLite

Dans SQLite, vous pouvez créer un CHECK contrainte en ajoutant le code applicable dans le CREATE TABLE déclaration lors de la création de la table.

Si une table a un CHECK contrainte, et vous essayez d'insérer ou de mettre à jour des données qui violent le CHECK contrainte, l'opération échouera avec une erreur.

Contrainte CHECK au niveau de la colonne

Voici un exemple de création d'un CHECK au niveau de la colonne contrainte.

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

La partie qui va CHECK (Price > 0) est le CHECK contrainte.

Dans ce cas, il précise que le prix doit être supérieur à zéro.

Voyons maintenant ce qui se passe si nous essayons d'insérer des données qui violent cette contrainte.

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

Résultat :

Error: CHECK constraint failed: Products

Le CHECK contrainte a fonctionné comme prévu.

J'obtiens le même résultat si j'essaie d'utiliser une valeur négative.

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

Résultat :

Error: CHECK constraint failed: Products

Mais si je l'augmente à une valeur supérieure à zéro, alors le INSERT l'opération réussit.

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

SELECT * FROM Products;

Résultat :

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

Contrainte CHECK au niveau de la table

Un CHECK au niveau de la table la contrainte vérifie les données sur toute la ligne, plutôt que sur une seule colonne. En d'autres termes, vous pouvez utiliser une contrainte au niveau de la table pour vérifier les données de plusieurs colonnes.

Voici un exemple de CHECK au niveau de la table contrainte.

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

Ce tableau est similaire au premier, sauf que j'ai ajouté une colonne supplémentaire appelée Remise .

Pour le CHECK contrainte, je vérifie maintenant que le prix est supérieur à la remise (nous ne voulons pas avoir la possibilité d'avoir une remise supérieure au prix réel).

Voici ce qui se passe si j'essaie d'insérer une remise supérieure au prix.

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

Résultat :

Error: CHECK constraint failed: Products

Si j'ajuste la remise pour qu'elle soit inférieure au prix, elle est insérée avec succès.

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

SELECT * FROM Products;

Résultat :

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