3

要件が次の場合、SQLiteにチェック制約を組み込むことを試みています。

  1. 値はnullである可能性があります
  2. 値がnullでない場合は、3より大きくする必要があります。

だから、私の作成テーブルに私は書いた

create table T(A real check(A = null or A>3)); 

このため、テーブルを作成しているように見えますが、大なり記号の条件は適用されません。

そして私も試しました

create table T(A real check(A is null or A>3)); 

これは、そもそもテーブルを作成することすらありません。

誰かがこれらの制約の両方を実施する方法を手伝ってもらえますか?

ありがとう

4

2 に答える 2

4

なぜ両方が必要なのですか?フィールドをNULLにして、条件A>3にするだけです。フィールドはNULLになるか、NOT NULLの場合は、3より大きくなります。

CREATE TABLE (A real NULL check(A>3))
于 2011-11-16T04:51:33.910 に答える
4

SQL-92標準から:

テーブルチェック制約は、指定された検索条件がテーブルのどの行に対してもfalseでない場合にのみ満たされます。

Anull の場合A > 3、SQLの3値論理のおかげで、UNKNOWNと評価されます。UNKNOWNはFALSEではないため、制約が満たされます。

標準がそのように書かれていなかった場合、すべての制約がnullを明示的にテストする必要があり、これはコーダーにとってより多くの「ノイズ」と苦痛になることを考慮してください。

于 2011-11-16T09:07:49.110 に答える