Проверьте ограничения в SQL - укажите, что значение может быть нулевым или ограничением - PullRequest
3 голосов
/ 16 ноября 2011

Я пытаюсь включить проверочное ограничение в SQLite, где требование следующее:

  1. Значение может быть нулевым
  2. Если значение не является нулевым, то оно должно бытьбольше 3.

Итак, в моей таблице создания я написал

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

Для этого похоже, что он создает таблицу, но не выполняет условие «больше чем».

И я также пытался

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

Это даже не создает таблицу в первую очередь.

Может кто-нибудь помочь, как обеспечить выполнение обоих этих ограничений?

Спасибо

Ответы [ 2 ]

4 голосов
/ 16 ноября 2011

Из стандарта SQL-92:

Ограничение проверки таблицы выполняется тогда и только тогда, когда указанное условие поиска не ложно для какой-либо строки таблицы.

Если A равно нулю, то A > 3, благодаря трехзначной логике SQL, получит значение UNKNOWN.Поскольку UNKNOWN не FALSE, ограничение будет выполнено.

Учтите, что если бы стандарт не был написан таким образом, то каждое ограничение должно было бы явно проверять наличие нуля, что было бы большим «шумом» и болью для кодеров.

4 голосов
/ 16 ноября 2011

Зачем вам оба? Просто позвольте полю быть НЕДЕЙСТВИТЕЛЬНЫМ и сделайте условие A> 3. Поле будет либо NULL, либо NOT NOT NULL, больше 3 ...

CREATE TABLE (A real NULL check(A>3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...