2013-11-26 2 views
1

я сделал таблицу, как это:MYSQL по умолчанию и диапазон

CREATE TABLE clients 
(
empno  INTEGER  NULL DEFAULT 7654 CHECK (7000 <= empno AND     
empno <= 8000), 
cname VARCHAR(20) NOT NULL 
); 

Я не хотел пустых полей CNAME, значение по умолчанию 7654 для EMPNO. Также значения для empno должны быть между 7000 и 8000. Две проблемы. Во-первых, в то время как я не могу поместить NULL для cname, если я положу '', он примет запись и отобразит пустой. Он должен отвергать это. Кроме того, я пробовал INSERT INTO clients (cname, empno) VALUES ('JANE', 6789); Он не должен был его принимать, но так и было! Я не могу понять проблему.

+2

Вы должны сделать свою собственную фильтрацию, чтобы поймать пустые строки на вашем конце. –

+0

Установка значений по умолчанию для полей с нулевым значением кажется немного противоречием. –

ответ

4
  1. Изменить empno поле NOT NULL
  2. Это документированная особенность: MySQL игнорирует CHECK положение.

From MySql docs:

Предложение ПРОВЕРКА анализируется, но игнорируется всеми механизмами хранения.

Report on MySQL Development forum

Обходной бы создать еще одну таблицу со значениями от 7000 до 8000 и добавить внешние ключи Ограничить, который искуственный двигатели InnoDB и NDB. Расскажите, как вы будете использовать этот столбец, и, возможно, есть способы работать с ним.

+0

Хорошо, так есть ли другой способ сделать это для MYSQL? – Modaresi

+0

@Modaresi, см. Обновление. В зависимости от использования столбца возможны другие способы. – Stoleg

Смежные вопросы