@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
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Нет, не должен. Значение NULL не противоречит такому check constraint. На самом деле даже в исходниках самого postgresql есть замечания, что такое поведение несколько неожиданно, но таков стандарт SQL.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы