SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.08.2008 14:04:19

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Значение полей по умолчанию

У меня вопрос, касающийся значений полей, которые надо ставить по умолчанию.
Если просто надо какое-то значение выставить по умолчанию, вроде цифры или строки - это понятно, что данному полю при отсутствии заносимого значения присвоится значение по умолчанию. Но есть возможность выставить значение null и not null. В чём отличие? Как вообще mysql поступает, когда ей требуется получить значение из поля, в котором стоит null? А если я укажу значение поля как null, это уже не будет рассматриваться как текстовая строка с данными?
Единственное, что мне известно, что значение null может каким-то образом повлиять на скорость извлечения данных.

Неактивен

 

#2 30.08.2008 14:11:50

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Значение полей по умолчанию

NULL и NOT NULL - свойство типа данных, а не значения по умолчанию.

Например, колонка int NOT NULL может хранить целое число, а колонка int NULL может хранить целое число или NULL. NULL - это специальное значение (не путать со значением 0) и его можно проверять специальной функцией ISNULL()

Неактивен

 

#3 31.08.2008 21:45:00

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: Значение полей по умолчанию

А могу ли я поставить null для колонки типа text? И в чём тогда смысл этого свойства?
Допустим, я много использую phpmyadmin, где это свойство легко можно выставить. Какие-то есть рекомендации, когда выставлять null, когда not null?

Неактивен

 

#4 31.08.2008 21:52:04

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Значение полей по умолчанию

Можете и для колонки типа text. Смысл такой, какой сами будете вкладывать. Для MySQL NULL - это просто спецзначение, которое либо может либо не может храниться в колонке. И конечно NULL не то же самое, что 0, пустая строка или строка "NULL".

Неактивен

 

#5 31.08.2008 22:32:08

Shopen
Гуру
Откуда: Москва
Зарегистрирован: 22.10.2007
Сообщений: 362

Re: Значение полей по умолчанию

sito-corito написал:

И в чём тогда смысл этого свойства?

Такой же как undefined во многих языках программирования, т.е. по сути троичная логика - true, false и undef.
Обычно NULL нет необходимости использовать, но бывает когда и нужно. Например вы вставляете строку в таблицу у которой все значения NOT NULL, после этого вы не можете определить 0 в числовых полях - это пользователь умышленно ввел ноль или оно так оказалось потому что это значение по умолчанию. Если вам нужно различать такие ситуации - то нужно использовать поля, допускающие NULL.

У меня на практике ситуаций, когда реально нужен NULL - ~5-10%. Во всех остальных случаях нужно экономить ресурсы и декларировать поля как NOT NULL.

Неактивен

 

#6 01.09.2008 15:37:33

Sign
Гуру
Зарегистрирован: 26.06.2008
Сообщений: 43

Re: Значение полей по умолчанию

Shopen написал:

У меня на практике ситуаций, когда реально нужен NULL - ~5-10%. Во всех остальных случаях нужно экономить ресурсы и декларировать поля как NOT NULL.

А как при этом экономятся ресурсы?

Неактивен

 

#7 01.09.2008 15:41:43

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Значение полей по умолчанию

См. обсуждение http://webew.ru/posts/1110.webew

Каждое поле, которое может быть NULL отнимает 1 бит в заголовке каждой записи в таблице. Обычно экономия на хранении данных незначительная. Дополнительная экономия при обработке - NULL требует анализа при каждой выборке (хотя анализ простой побитовый) и NULL несколько усложняет структуру индекса (добавляется указатель на список NULL-записей).

Неактивен

 

#8 01.09.2008 21:53:43

sito-corito
Завсегдатай
Зарегистрирован: 13.07.2008
Сообщений: 53

Re: Значение полей по умолчанию

Не очень понятно %\ про этот ноль, который и не ноль вовсе.
Но и на том спасибо

Неактивен

 

#9 12.09.2008 23:30:36

callisto
Участник
Зарегистрирован: 12.09.2008
Сообщений: 2

Re: Значение полей по умолчанию

NULL в mysql означает "неизвестно", т.е. считается, что значение поля не определено. И этот "ноль, который и не ноль вовсе" на самом деле очень важен и нужен, т.к если вы вводите в таблицу запись, где вы пока не знаете, что должно быть в одном из полей, вы оставляете там значение NULL, т.е. неизвестное значение. Если mysql выводит поле, где стоит null, то в выводе он так и запишет:NULL. Смысл для типа text тот же.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson