Концепция NULL-значения
часто вводит в заблуждение
новичков в SQL, которые считают, что
NULL - то же, что и пустая
строка "". Это ошибка!
Например, следующие команды
совершенно различны:
mysql>INSERT INTO my_table (phone) VALUES (NULL);mysql>INSERT INTO my_table (phone) VALUES ("");
Обе команды вставляют значение в
столбец phone, но первая -
значение NULL, а вторая -
пустую строку. Смысл первого можно
передать как ``номер телефона
неизвестен'', смысл второго - ``у нее
нет телефона''.
В SQL сравнение значения
NULL с любым другим
значением, даже со значением
NULL, всегда ложно.
Выражение, содержащее
NULL, всегда дает значение
NULL, за исключением
случаев, специально оговоренных в
документации по операторам и
функциям, присутствующим в
выражении. Все столбцы в следующем
примере возвращают NULL:
mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);
Если в столбце нужно найти
значения NULL, то нельзя
использовать условие
=NULL. Следующая команда не
возвращает ни одной строки,
поскольку для любого выражения
expr = NULL ЛОЖНО:
mysql> SELECT * FROM my_table WHERE phone = NULL;
Для поиска значений NULL
необходимо использовать проверку
IS NULL. Ниже показано, как
найти телефонный номер
NULL и пустой телефонный
номер:
mysql>SELECT * FROM my_table WHERE phone IS NULL;mysql>SELECT * FROM my_table WHERE phone = "";
Заметим, что добавлять индекс по
столбцу, в котором допускаются
значения NULL, можно
только в случае, если вы работаете
с версией MySQL 3.23.2 или выше, а
используемый тип таблиц -
MyISAM или InnoDB. В
более ранних версиях или для
других типов таблиц необходимо
объявлять такие столбцы с
атрибутом NOT NULL. Это
также подразумевает, что тогда
нельзя вставлять NULL в
индексированный столбец.
При чтении данных с помощью LOAD
DATA INFILE пустые поля
обновляются значениями ''. Если
необходимо поместить в столбец
значение NULL, то в
текстовом файле следует
использовать \N. Также
при некоторых обстоятельствах
можно использовать слово-литерал
NULL (see Раздел 6.4.9, «Синтаксис оператора LOAD DATA INFILE»).
При использовании ORDER BY
значения NULL выдаются
первыми. В версиях предшествующих
4.0.2, при сортировке в убывающем
порядке при помощи DESC,
значения NULL также
выдаются последними. При
использовании GROUP BY все
значения NULL считаются
равными.
Для обработки NULL
предназначены операторы IS
NULL и IS NOT NULL, а также
функция IFNULL().
Для некоторых типов столбцов
значения NULL
обрабатываются специальным
образом. Если NULL
вставляется в первый в таблице
столбец типа TIMESTAMP, то в
него помещается значение текущей
даты и времени. При вставке
NULL в
AUTO_INCREMENT-столбец
вставляется следующее число
последовательности.
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.
© 1995-2005 MySQL AB. All rights reserved.
