Следующий код создает таблицу без каких-либо ошибок:
CREATE TABLE test(
ID INTEGER NULL,
CONSTRAINT PK_test PRIMARY KEY(ID)
)
Обратите внимание, что я не могу вставить NULL, как и ожидалось:
INSERT INTO test
VALUES(1),(NULL)
ERROR: null value in column "id" violates not-null constraint
DETAIL: Failing row contains (null).
********** Error **********
ERROR: null value in column "id" violates not-null constraint
SQL state: 23502
Detail: Failing row contains (null).
Почему я могу создать таблицу с самопротиворечивым определением? Идентификатор явно объявлен как NULLable, и он неявно не является нулевым, как часть PRIMARY KEY. Имеет ли смысл?
Изменить: не было бы лучше, если бы этот самопротиворечивый CREATE TABLE просто не удался прямо там?