すべてのCHECK
を有効または無効にする必要がある場合 SQLiteの制約では、 ignore_check_constraintsを使用できます PRAGMAステートメント。
このプラグマステートメントは、 CHECK
の強制を明示的に有効または無効にします 制約。デフォルト設定はオフです。つまり、 CHECK
制約はデフォルトで適用されます。
構文
構文は次のようになります:
PRAGMA ignore_check_constraints = boolean;
ブール値の場所 ブール値です。
-
CHECK
を無効にするには 制約。これは次のいずれかになります。-
false
いいえ
オフコード>
-
0
-
-
CHECK
を有効にするには 制約、これは次のいずれかになります:-
true
はい
オンコード>
-
1
-
例
まず、 CHECK
を使用してテーブルを作成しましょう 制約:
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price
CHECK (Price > 0)
);
これで、 CHECK
を切り替えることができます 必要に応じて制約をオンまたはオフにして、その制約を適用するかどうかを決定します。
チェック制約を有効にする
すべてのCHECK
を有効にする例を次に示します。 制約:
PRAGMA ignore_check_constraints = 0;
前述のように、これはとにかくデフォルト値です。したがって、このPRAGMAステートメントを使用しない場合は CHECK
制約はすでにこの値に設定されています。
それでは、その CHECK
をテストしてみましょう。 制約は、実際には、その CHECK
に違反するデータを挿入しようとすることで有効になります。 制約:
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00);
結果:
Error: CHECK constraint failed: Products
したがって、 CHECK
期待どおりに制約が適用されました。
チェック制約を無効にする
すべてのCHECK
を無効にする例を次に示します。 制約:
PRAGMA ignore_check_constraints = 1;
次に、同じデータをもう一度挿入して、結果を選択してみましょう。
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00);
SELECT * FROM Products;
結果:
ProductId ProductName Price ---------- ----------- ---------- 1 Blue Widget 0.0
予想どおり、データは CHECK
に違反していても、なんとかデータベースに入ることができました。 制約。