2012-06-14 5 views
2

У меня есть TABLEA с следующим выводом из команды убывания TABLEA:падение по умолчанию ограничение

+---------+-------------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+---------+-------------+------+-----+---------+----------------+ 
| id  | int(11)  | NO | PRI | NULL | auto_increment | 
| name | varchar(50) | NO |  |   |    | 
| city | varchar(50) | YES |  | NULL |    | 
| state | char(2)  | YES |  | NULL |    | 
| country | varchar(30) | YES |  | NULL |    | 
| notes | longtext | YES |  | NULL |    | 
| type | varchar(50) | NO |  | NULL |    | 
+---------+-------------+------+-----+---------+----------------+ 

Теперь есть 3 колонков с NOT NULL ограничений:

  1. ID
  2. именем
  3. типа

Для столбцов id и типа мне нужно удалить ограничение по умолчанию. В принципе я хочу По умолчанию: Нет. Я не хочу использовать обходные пути, например. значение по умолчанию для 'varchar.

Разница между NULL, NONE, и «» становится более ясно из этой дискуссии Default-values-for-varchar-and-int-mysql-data-types

Я попытался с помощью команды:

alter table tableA alter column type drop default; 

Запрос работает нормально, но ни одна строка не затрагиваются. И никакое изменение значения по умолчанию не отображается, когда я запускаю команду описания.

Если я установил значение по умолчанию для «Я столкнулся с другой проблемой - база данных позволяет вводить пустую строку в db. Для меня это эквивалентно введению NULL для значения столбца, и я не хочу этого допускать.

Мне нужно некоторое руководство по обработке значений по умолчанию в этой ситуации, когда я не могу разрешать пустые строки как данные в db. Я хочу упомянуть, что я планирую включить проверки в код, чтобы проверить, являются ли входящие данные пустой строкой или NULL. Но на всякий случай, если проверка не работает и т. Д., Я хочу убедиться, что БД может отказаться от добавления таких данных.

Любая помощь действительно оценена.

+0

http://stackoverflow.com/questions/5807231/mysql-check-constraint-alternative – biziclop

ответ

0

Если столбец может быть равен нулю, то по умолчанию или null одинаковы. Так разрешены Null, по умолчанию нулевой фактически не имеет значения, за исключением, когда делают говорить

Вставка (имя, город, тип) Значения ('Fred', УМОЛЧАНИЮ 'кавказского')

Null не пустая строка. Учитывая, что вы допускаете нуль в таблице, но интерпретируете ее как пустую строку в своем приложении, у вас есть раздражающий недостаток в вашем дизайне.

Если вам не нужны пустые строки, обычно вы должны использовать ограничение проверки, которое, насколько я знаю, не реализовано в mysql. По-видимому, этот недостаток обычно решается с помощью триггера вставки. Итак, вы должны проверить значение в триггере, а затем пропустить вставку для пустых строк.

PS Это не решает проблему целостности, но если вы действительно хотите установить пустые значения, когда наложение было пустым, вам не нужно было бы различать пустую строку и null.

Затем взгляните на функцию nullif.

+0

Спасибо, что ответили.
Я понял и +1 идею размещения триггера вставки при вставке пустых строк. Однако я не уверен, понимаю ли я то, что вы хотели написать, связанное со значением NULL по умолчанию.Я понимаю разницу между NULL, '' и None (т.е. значением по умолчанию). Я ищу, чтобы найти решение, в котором я могу удалить ограничение по умолчанию из существующего столбца. Я привел примеры того, что я пробовал, и почему они не подходят для меня. Я надеюсь, что эти примеры не сообщаются иначе. Спасибо –

+0

Как избавиться от значения по умолчанию null, не поможет вам. Пропустите его в инструкции insert, и оно будет равно null. Используйте значения по умолчанию или null, это будет null. Единственный раз, когда этого не будет, если вы помещаете туда что-то отличное от нуля, которое включает пустую строку, которая означает, что она не будет использоваться по умолчанию. Если вы хотите запретить null, сделайте столбец не нулевым, если вы хотите запретить пустые строки использовать триггер. Если вы хотите сделать то и другое, сделайте обоим. –

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