If you ever need to enable or disable all CHECK constraints in SQLite, you can use the ignore_check_constraints PRAGMA statement.
This pragma statement explicitly enables or disables the enforcement of CHECK constraints. The default setting is off, meaning that CHECK constraints are enforced by default.
Syntax
The syntax goes like this:
PRAGMA ignore_check_constraints = boolean;
Where boolean is a boolean value.
- To disable
CHECKconstraints, this can be any of the following:falsenooff0
- To enable
CHECKconstraints, this can be any of the following:trueyeson1
Example
First, let’s create a table with a CHECK constraint:
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price
CHECK (Price > 0)
);
Now we can toggle CHECK constraints on or off as required to either enforce or not enforce that constraint.
Enable CHECK Constraints
Here’s an example of enabling all CHECK constraints:
PRAGMA ignore_check_constraints = 0;
As mentioned, this is the default value anyway. So if you don’t use this PRAGMA statement CHECK constraints will already be set to this value.
Now let’s test that CHECK constraints are in fact enabled by attempting to insert data that violates that CHECK constraint:
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00);
Result:
Error: CHECK constraint failed: Products
So the CHECK constraint was enforced as expected.
Disable CHECK Constraints
Here’s an example of disabling all CHECK constraints:
PRAGMA ignore_check_constraints = 1;
Now let’s try to insert the same data again and select the result:
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00);
SELECT * FROM Products;
Result:
ProductId ProductName Price ---------- ----------- ---------- 1 Blue Widget 0.0
As expected, the data managed to enter the database, even though it violates the CHECK constraint.