Справочное руководство по MySQL
Концепция 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 section 6.4.9 Синтаксис оператора LOAD DATA INFILE).
При использовании ORDER BY значения NULL выдаются первыми. При сортировке
в убывающем порядке с помощью DESC значения NULL также выдаются первыми.
При использовании GROUP BY все значения NULL считаются равными.
Для обработки NULL предназначены операторы IS NULL и IS NOT NULL, а также
функция IFNULL().
Для некоторых типов столбцов значения NULL обрабатываются специальным
образом. Если NULL вставляется в первый в таблице столбец типа TIMESTAMP,
то в него помещается значение текущей даты и времени. При вставке NULL в
AUTO_INCREMENT-столбец вставляется следующее число последовательности.