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