sql >> Base de Datos >  >> RDS >> SQLite

Crear una restricción CHECK en SQLite

En SQLite, puede crear un CHECK restricción agregando el código aplicable dentro de CREATE TABLE declaración al crear la tabla.

Si una tabla tiene un CHECK restricción en él, e intenta insertar o actualizar datos que violan el CHECK restricción, la operación fallará con un error.

Restricción CHECK a nivel de columna

Aquí hay un ejemplo de cómo crear un CHECK a nivel de columna restricción.

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

La parte que dice CHECK (Price > 0) es el CHECK restricción.

En este caso, especifica que el precio debe ser mayor que cero.

Ahora veamos qué sucede si intentamos insertar datos que violan esta restricción.

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

Resultado:

Error: CHECK constraint failed: Products

El CHECK la restricción funcionó como se esperaba.

Obtengo el mismo resultado si trato de usar un valor negativo.

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

Resultado:

Error: CHECK constraint failed: Products

Pero si lo aumento a un valor mayor que cero, entonces INSERT la operación tiene éxito.

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

SELECT * FROM Products;

Resultado:

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

Restricción CHECK a nivel de tabla

Un CHECK a nivel de tabla La restricción verifica los datos en toda la fila, en lugar de solo en una sola columna. En otras palabras, puede usar una restricción a nivel de tabla para verificar datos de varias columnas.

Aquí hay un ejemplo de un CHECK a nivel de tabla restricción.

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

Esta tabla es similar a la primera, excepto que agregué una columna adicional llamada Descuento .

Para el CHECK restricción, ahora estoy comprobando que el precio sea mayor que el descuento (no queremos la posibilidad de tener un descuento mayor que el precio real).

Esto es lo que sucede si intento insertar un descuento mayor que el precio.

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

Resultado:

Error: CHECK constraint failed: Products

Si ajusto el descuento para que sea más bajo que el precio, se inserta correctamente.

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

SELECT * FROM Products;

Resultado:

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