В чем разница между NULL и NOT NULL? И когда их следует использовать?MySQL NULL или NOT NULL Это вопрос?
ответ
NULL означает, что вы не должны указать значение для поля ...
NOT NULL означает, что вы должны указать значение для поля.
Например, если вы создаете таблицу зарегистрированных пользователей для системы, вы можете захотеть убедиться, что идентификатор пользователя всегда заполнен значением (то есть NOT NULL), но поле имени необязательных супругов может (NULL)
Простейшее ответить кто мог бы дал. ;) – Zack
Вне JDBC MySQL позволяет опустить значение для столбца 'NOT NULL' *, если * в столбце есть' DEFAULT'. Я заметил, что это не имеет смысла для некоторых программистов, но так оно и работает. – staticsan
@staticsan Это неправда или, по крайней мере, очень вводящая в заблуждение, сказать, что «MySQL позволяет вам опустить значение для столбца« NOT NULL »» - должно быть задано некоторое значение (это именно то, что означает «NOT NULL'), и если вы не поставляйте его, тогда MySQL будет предоставлять значение «DEFAULT». Если столбец не определяет значение DEFAULT, MySQL может по-прежнему предоставлять неявное значение по умолчанию для типа данных, если строгий режим не включен. ([docs link] (https://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html)) – Air
NOT NULL
означает, что столбец не может иметь значение NULL
, вместо этого, если ничего не указано при вставке строки для этого столбца, он будет использовать все значения по умолчанию (или если не указано значение по умолчанию, то, для этого типа).
Поля, которые не являются NOT NULL
, потенциально могут иметь свое значение как NULL
(что по существу означает отсутствие/неизвестное/неуказанное значение). NULL
ведет себя иначе, чем нормальные значения, see here for more info.
более «технический» ответ :) – Zack
NOT NULL
столбец ограничение и следует использовать, когда у вас есть столбец, которого нет в первичном ключе (первичные ключи по своей сути не-нуль, так что глупо говорить NOT NULL
явно о них), из которых вы знаете, значения будут всегда (неизвестно или отсутствует), поэтому нет нулей в этом столбце.
NULL
- это ключевое слово, встречающееся во многих контекстах, в том числе в качестве ограничения столбца, где оно означает то же, что и значение по умолчанию (то есть, нули разрешены), но также и во многих других контекстах, например. для ввода нулевого значения в столбце в качестве части инструкции INSERT...VALUES
.
В чем разница между NULL и NOT NULL?
При создании таблицы или добавить столбец в таблицу, необходимо указать значение столбца необязательность, используя либо NULL
или NOT NULL
. NOT NULL
означает, что столбец не может иметь значение NULL
для любой записи; NULL
означает, что NULL
является допустимым значением (даже если столбец имеет ограничение внешнего ключа). Поскольку NULL
не является значением, вы можете понять, почему некоторые называют его опциональным - потому что для таблицы базы данных требуется, чтобы для столбца должен быть экземпляр столбца для каждой записи в таблице.
И когда они должны использоваться?
Это определяется вашими бизнес-правилами.
Как правило, вы хотите, чтобы как можно больше столбцов было NOT NULL
, потому что вы хотите быть уверены, что данные всегда есть.
Я хотел бы предложить
- Используйте NOT NULL, на каждом поле, если вы можете
- Использование NULL, если есть разумная причина, он может быть пустым
Имея поля, которые не имеют значащее значение для NULL с нулевым значением, вероятно, приведет к ошибкам, когда nulls вводят их случайно. Использование NOT NULL предотвращает это.
Наиболее распространенной причиной для полей NULL является то, что у вас есть поле внешнего ключа, которое является параметром, то есть не всегда связанным, для отношения «нуль или один».
Если вы обнаружили, что есть таблица с большим количеством колонн, многие из которых могут быть NULL, что начинает звучать как антипаттерн, рассмотрим, имеет ли вертикальное разделение смысл в контексте приложения :)
Существует еще один полезный использование для NULL - создание всех столбцов в индексе NULL остановит создание индексной записи для этой строки, которая оптимизирует индексы; вам может понадобиться индексировать только очень небольшое подмножество строк (например, для «активного» флага, установленного всего на 1% или что-то еще) - создание индекса, который начинается с столбца, который обычно равен NULL, сохраняет пространство и оптимизирует этот индекс.
Также обратите внимание, что NULL не является чем-то другим, даже не для самого NULL.
Например:
mysql> select if(NULL=NULL, "null=null", "null!=null");
+------------------------------------------+
| if(NULL=NULL, "null=null", "null!=null") |
+------------------------------------------+
| null!=null |
+------------------------------------------+
1 row in set (0.00 sec)
Это определение NULL очень полезно, когда вам нужен уникальный ключ на колонке, частично заполненной. В таком случае вы можете просто оставить все пустые значения как NULL, и это не вызовет нарушения ключа уникальности, так как NULL! = NULL.
Вот пример того, как вы можете увидеть, если что-то NULL:
mysql> select if(null is null, "null is null", "null is not null");
+------------------------------------------------------+
| if(null is null, "null is null", "null is not null") |
+------------------------------------------------------+
| null is null |
+------------------------------------------------------+
1 row in set (0.01 sec)
Как и другие ответили, NOT NULL
просто означает, что NULL
не допускаемое значение. Тем не менее, вы всегда будете иметь возможность пустой строки ''
(для varchar
) или 0
(для int
) и т.д.
Одна хорошая особенность при использовании NOT NULL
является то, что вы можете получить сообщение об ошибке или предупреждение, если вы забудете установить колонки значение в течение INSERT
. (При условии, NOT NULL
столбца не имеет DEFAULT
)
Основная икота с разрешительными NULL
колонн является то, что они никогда не будут найдены с (не равно) <>
. Например, с помощью следующих category
сек
Desktops
Mobiles
NULL -- probably embedded devices
Оператор =
работает, как ожидалось
select * from myTable where category="Desktops";
Однако оператор <>
исключает любые NULL
записи.
select * from myTable where category<>"Mobiles";
-- returns only desktops, embedded devices were not returned
Это может быть причиной тонких ошибок, особенно если столбец не имеет NULL
данных во время тестирования начального, но позже некоторые NULL
значений добавляются в связи с последующим развитием. По этой причине я установил все столбцы в NOT NULL
.
Однако, это может быть полезно, чтобы NULL
значения при использовании UNIQUE
KEY
/INDEX
. Обычно уникальный ключ требует, чтобы столбец (или комбинация столбцов) был уникальным для всей таблицы. Уникальные ключи - отличная защита, которую база данных будет обеспечивать для вас.
В некоторых случаях вам может понадобиться защита для большинства строк, но есть исключения.
Если какая-либо колонка, на которую ссылается данный номер UNIQUE KEY
, - NULL
, то уникальность для этой строки больше не будет применяться. Очевидно, что это будет работать, только если вы разрешите NULL
s в этой колонке, понимая, что икота я объяснил выше.
Если вы решили разрешить NULL
значения, рассмотрим написание <>
заявления с дополнительным условием для обнаружения NULL
с.
select * from myTable where category<>"Desktops" or category is null;
Бит о < and > Оператор, не работающий с NULL, является важным прозрением, спасибо за обмен. –
- 1. MySQL NULL вопрос
- 2. NULL! = NULL в запросе mysql
- 3. Вопрос Null против нулевого
- 4. Это невероятно умный или абсолютно бесполезный «где (table.field = NULL или null null)»?
- 5. '...! = Null' или 'null! = ....' лучшая производительность?
- 6. NULL macro или NULL const
- 7. (a! = Null) или (null! = A)
- 8. (null! = SomeVariable) ИЛИ (someVariable! = Null)
- 9. execCommand == null (это фактически «null not»)
- 10. MySQL: NULL vs ""
- 11. Null объект дизайн шаблон вопрос
- 12. Вопрос TimeField относительно пробела/null
- 13. Как новый WaitHandle [] возвращает null? Или это?
- 14. MySQL Изменение от Null до Non Null
- 15. Почему это null?
- 16. Зачем это нужно? = Null?
- 17. Почему это возвращает null?
- 18. Когда это возвращает null?
- 19. Почему это CCSpriteFrame null?
- 20. Почему это возвращает NULL
- 21. Когда это null
- 22. PHP значение NULL декремент вопрос
- 23. NULL и NOT NULL в MYSQL
- 24. UNSIGNED NOT NULL mySql
- 25. Почему язык SQL использует NULL или IS NULL вместо = NULL или <> NULL?
- 26. MySQL хранит boolean - 1, 0 или NULL
- 27. Исключение null null null
- 28. Equals (item, null) или item == null
- 29. Который быстрее: «null == myObject» или «myObject == null»?
- 30. Как сделать отображение NULL или NULL?
название вызвала улыбку на меня: D – Aishwar