2015-04-07 2 views
0

Я создал таблицу «TEST», и я попытался ввести некоторые данные, однако у меня появилась ошибка. Ошибка ОШИБКА: новая строка для отношения «тест» нарушает ограничение проверки «test_status_check». ДЕТАЛЬ: Неудачная строка содержит (5, 2015-07-21, 15:00:00, I7, 9, NULL, NULL). Я думаю, что это из-за нулевого статуса. Поэтому я пытался поставить нуль в тестовой таблице, но до сих пор не работаетpostgreSQL check constraint и null

Create table test(
    clientID CHAR (20), 
    startDate date, 
    startTime time, 
    instructorNO CHAR(20), 
    centreID CHAR(20), 
    status CHAR(4) CHECK (status IN ('Fail','Pass')) NULL, 
    reason VARCHAR(400), 

    omitted... 
    ) 

ОШИБКИ: новая строка для связи «тест» нарушает проверочное ограничение «test_status_check» ДЕТАЛЬ: В противном случае строка содержит (5, 2015-07-21 , 15:00:00, I7, 9, NULL, NULL).

+1

это mysql или postegresql ?? – BK435

+0

Postgres 9.3 примите ваш синтаксис, однако, действительно, что именно вы хотите. Postgres, MySQL и какая версия? –

+0

Я удалил тег MySQL, так как заголовок ясно говорит PostgreSQL (и в прошлый раз, когда я проверял, ограничения CHECK не работают в MySQL в любом случае). –

ответ

1

EDIT: Я полностью передумал. Ваш действующий код действителен (и часть NULL не нужна).

Согласно the documentation,

It should be noted that a check constraint is satisfied if the check expression evaluates to true or the null value. Since most expressions will evaluate to the null value if any operand is null, they will not prevent null values in the constrained columns. To ensure that a column does not contain null values, the not-null constraint described in the next section can be used.

Так, еще что-то перепутались. См. here для примера вашего исходного кода.

+0

@Bredan Long, когда я ввожу некоторые данные в таблицу, возникает ошибка * Ошибка завершена: ERROR: новая строка для отношения «тест» нарушает ограничение проверки «test_status_check». ДЕТАЛЬ: Неудачная строка содержит (2, 2015-04-29, 10:00). : 00, I2, 1, NULL, NULL). * –

+0

@nicholaslui Вы уверены, что удалили старое ограничение? –

+0

Хм, странно .. ваш исходный код работает для меня на PostgreSQL 9.3.6: \ –