MySQL "NULL" вопросы - PullRequest
       27

MySQL "NULL" вопросы

9 голосов
/ 07 февраля 2010

У меня есть таблица с несколькими столбцами.

Иногда некоторые из этих полей столбцов могут быть пустыми (т. Е. Я не буду использовать их в некоторых случаях).

Мои вопросы:

  1. Было бы разумно установить для них значение NULL в phpmyadmin?

  2. Что на самом деле делает свойство NULL?

  3. Получу ли я что-нибудь вообще, установив их в NULL?

  4. Можно ли использовать поле NULL таким же образом, даже если оно установлено на ноль?

Ответы [ 6 ]

14 голосов
/ 07 февраля 2010

Концепция значения NULL является распространенным источником путаницы для новичков в SQL, которые часто думают, что NULL совпадает с пустой строкой '' или нулевым значением.

Это не тот случай. Концептуально, NULL означает «пропущенное неизвестное значение», и оно трактуется несколько иначе, чем другие значения. Например, для проверки на NULL нельзя использовать операторы арифметического сравнения, такие как =, <или <>.

Если у вас есть столбцы, которые могут содержать «пропущенное неизвестное значение», вы должны настроить их на прием NULL.

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

4 голосов
/ 07 февраля 2010

Я рекомендую прочитать Проблемы со значениями NULL .

3 голосов
/ 07 февраля 2010

Попробуем ответить на все ваши вопросы сразу.

NULL представляет что-то вроде «Неизвестно» / «Нет значения» или «Не применимо». Так что да, если есть столбцы, которые не используются в определенных обстоятельствах, было бы целесообразно установить их в NULL, когда они не используются (так как никакое другое значение не подходит).

Можно ограничить столбец NOT NULL, что означает, что столбец должен иметь значение для каждой строки. Примером может служить столбец «name» записи «person». Для имени не имеет смысла быть НЕДЕЙСТВИТЕЛЬНЫМ, поскольку у каждого есть имя.

Вы можете"использовать" столбец NULL, просто имейте в виду, что вы должны быть осторожны при сравнении. Поле NULL никогда не равно другому полю. Поставьте галочку для «IS NULL» или «IS NULL».

3 голосов
/ 07 февраля 2010

1- Было бы разумно установить их NULL в phpmyadmin?

Все поля по умолчанию являются пустыми, если вы не укажете для них значение по умолчанию или не вставите для них какое-либо значение. Не нужно этого делать ...

2 -Что делает свойство "NULL" на самом деле?

Null означает, что вы не присвоили ему никакого значения.

3- Получу ли я что-нибудь вообще установить их в NULL?

Как уже было сказано, все поля по умолчанию являются пустыми, если вы не укажете для них значение по умолчанию или не вставите для них какое-либо значение. Я не думаю, что вы что-то получите.

4 - Возможно ли использовать пустое поле таким же образом, даже если он установлен нуль

Что бы вы получили от поля со значением NULL? В этом тоже нет необходимости.

1 голос
/ 07 февраля 2010

Краткие ответы на ваши вопросы:

  1. Да, NULL означает, что поле вообще ничего не содержит. Если это истинное положение вещей, это то, что данные должны сказать. Примером может служить shipped_date для заказа, который еще не отправлен. В этом случае NULL будет точно представлять значение до тех пор, пока заказ не будет отправлен, поскольку до тех пор, пока это не произойдет, не будет действительного времени, в которое он выполнялся (и в этом случае проверка значения NULL может быть весьма полезным инструментом для какие заказы все еще нужно отправить).

  2. NULL означает, что поле ничего не содержит. «Ничто» не отличается, скажем, от значения 0 или строки «», так как это значения. NULL означает примерно то же самое, что «N / A» или «Я отказываюсь отвечать». Что именно это будет означать, зависит от контекста столбца. Конечно, некоторые столбцы никогда не должны быть НЕДЕЙСТВИТЕЛЬНЫМИ, и вы можете применить это к вашей таблице.

  3. Если большинство полей в столбце имеют значение NULL, вам следует переосмыслить, как именно вы используете этот столбец. Вообще говоря, большое количество значений NULL указывает на то, что вы могли бы лучше проектировать свои таблицы. Что касается значения по умолчанию, вы всегда можете установить значение NULL в значение NULL.

  4. Так же, как и что? NULL - это уникальное значение. Это не эквивалентно 0, или "", или чему-либо еще в этом роде. В запросе вы должны проверить IS NULL или IS NOT NULL, и если в набор данных добавляется значение NULL, вы должны также проверить его там. На вопрос, равен ли столбец NULL 0 или "", или что там у вас, вы получите false.

0 голосов
/ 07 февраля 2010

Теперь иногда некоторые из этих полей столбцов могут быть пустыми (т.е. я не буду использовать их в некоторых случаях).

  1. Было бы разумно установить для них значение NULL в phpmyadmin?

Да, вот для чего.

  1. Что на самом деле делает свойство NULL?

Это позволяет базе данных разрешать NULL в качестве значения, хранящегося в столбце. «НЕ ПУСТО» означает столбец должен иметь значение, которое не равно NULL.

  1. Получу ли я что-нибудь вообще, установив их в NULL?

Нет. Если ваша логика требует, чтобы столбец никогда не содержал NULL в качестве значения, лучше установить для него значение "NOT NULL". Считайте это утверждением: можно с уверенностью предположить, что значение столбца никогда не будет равно NULL, поэтому вам не нужно проверять его. Эта база данных заботится об этом утверждении.

  1. Можно ли использовать поле NULL таким же образом, даже если оно установлено на ноль?

Я не уверен, что вы подразумеваете под этим ... В любом случае, столбцы NULL и NOT NULL идентичны во всех отношениях, за исключением того, что столбцы NULL могут содержать NULL.

И NULL - странное значение. val = NULL равно никогда true, даже если val равно NULL. Для этого вы должны проверить с "IsNull()", "IS NULL" или "IS NOT NULL". См. Справочное руководство: Функции сравнения и операторы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...