@nishe

Почему я могу установить NULL в колонку mark, если у меня есть CHECK(mark in (1,2,3))?

Разве он не должен выдавать ошибку, ведь mark = NULL, не является mark IN (1,2,3)?

ALTER TABLE progress
ADD CHECK(
    (test_form = 'Test' AND mark in (1,2,3))
    OR
    (test_form = 'Exam' AND mark in (4,5))
);

UPDATE progress
SET test_form = 'Exam', mark = NULL;


Результат выполнения кода: UPDATE 3
  • Вопрос задан
  • 51 просмотр
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Нет, не должен. Значение NULL не противоречит такому check constraint. На самом деле даже в исходниках самого postgresql есть замечания, что такое поведение несколько неожиданно, но таков стандарт SQL.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы