SQLiteでは、CHECK
を作成できます CREATE TABLE
内に該当するコードを追加することによる制約 テーブルを作成するときのステートメント。
テーブルにCHECK
がある場合 制約があり、CHECK
に違反するデータを挿入または更新しようとしました 制約がある場合、操作はエラーで失敗します。
列レベルのチェック制約
列レベルのCHECK
を作成する例を次に示します。 制約。
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price
CHECK (Price > 0)
);
CHECK (Price > 0)
に進む部分 CHECK
です 制約。
この場合、価格はゼロより大きくなければならないことを指定します。
次に、この制約に違反するデータを挿入しようとするとどうなるか見てみましょう。
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 0.00);
結果:
Error: CHECK constraint failed: Products
CHECK
制約は期待どおりに機能しました。
負の値を使用しようとしても同じ結果が得られます。
INSERT INTO Products VALUES
(NULL, 'Blue Widget', -1.00);
結果:
Error: CHECK constraint failed: Products
ただし、ゼロより大きい値に増やすと、INSERT
操作は成功します。
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00);
SELECT * FROM Products;
結果:
ProductId ProductName Price ---------- ----------- ---------- 1 Blue Widget 1.0
テーブルレベルのチェック制約
テーブルレベルのCHECK
制約は、単一の列だけでなく、行全体にわたってデータをチェックします。つまり、テーブルレベルの制約を使用して、複数の列のデータをチェックできます。
これは、テーブルレベルのCHECK
の例です。 制約。
CREATE TABLE Products(
ProductId INTEGER PRIMARY KEY,
ProductName,
Price,
Discount,
CHECK (Price >= Discount)
);
この表は最初の表と似ていますが、割引という列を追加した点が異なります。 。
CHECK
の場合 制約として、価格が割引よりも大きいことを確認しています(実際の価格よりも大きい割引が発生する可能性はありません)。
価格よりも大きい割引を挿入しようとすると、次のようになります。
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 2.00);
結果:
Error: CHECK constraint failed: Products
価格より低くなるように割引を調整すると、正常に挿入されます。
INSERT INTO Products VALUES
(NULL, 'Blue Widget', 1.00, 0.50);
SELECT * FROM Products;
結果:
ProductId ProductName Price Discount ---------- ----------- ---------- ---------- 1 Blue Widget 1.0 0.5