Spec-Zone .ru
спецификации, руководства, описания, API

C.5.5.3. Проблемы с NULL Значения

Понятие NULL значение является общим источником беспорядка для вновь прибывших к SQL, которые часто думают это NULL та же самая вещь как пустая строка ''. Дело обстоит не так. Например, следующие операторы абсолютно отличаются:

mysql> INSERT INTO my_table (phone) VALUES
        (NULL);mysql> INSERT INTO my_table (phone) VALUES
        ('');

Оба оператора вставляют значение в phone столбец, но первые вставки a NULL значение и вторые вставки пустая строка. Значение первого может быть расценено, поскольку "номер телефона не известен", и значение второго может быть расценено, поскольку "у человека, как известно, нет никакого телефона, и таким образом никакого номера телефона."

Помочь с NULL обработка, можно использовать IS NULL и IS NOT NULL операторы и IFNULL() функция.

В SQL, NULL значение никогда не является истиной по сравнению с любым другим значением, даже NULL. Выражение, которое содержит NULL всегда производит a NULL оцените если иначе не обозначено в документации для операторов и функций, включенных в выражение. Все столбцы в следующем возврате в качестве примера NULL:

mysql> SELECT NULL, 1+NULL,
        CONCAT('Invisible',NULL);

Искать значения столбцов, которые являются NULL, невозможно использовать expr = 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 =
        '';

См. Раздел 3.3.4.6, "Работающий с NULL Значения", для дополнительной информации и примеров.

Можно добавить индексирование на столбце, который может иметь NULL значения, если Вы используете MyISAM, InnoDB, или MEMORY механизм хранения. Иначе, следует объявить индексированный столбец NOT NULL, и невозможно вставить NULL в столбец.

Читая данные с LOAD DATA INFILE, пустые или недостающие столбцы обновляются с ''. Загрузить a NULL значение в столбец, использовать \N в файле данных. Литеральное слово"NULL"может также использоваться при некоторых обстоятельствах. См. Раздел 13.2.6,"LOAD DATA INFILE Синтаксис".

При использовании DISTINCT, GROUP BY, или ORDER BY, все NULL значения расцениваются как равные.

При использовании ORDER BY, NULL значения представляются сначала, или последние, если Вы определяете DESC к виду в порядке убывания.

Агрегат (сводка) функционирует такой как COUNT(), MIN(), и SUM() проигнорировать NULL значения. Исключение к этому COUNT(*), который считает строки и не отдельные значения столбцов. Например, следующий оператор производит два количества. Первым является количество числа строк в таблице, и вторым является количество числа не -NULL значения в age столбец:

mysql> SELECT COUNT(*), COUNT(age) FROM
        person;

Для некоторых типов данных, дескрипторов MySQL NULL значения особенно. Если Вы вставляете NULL в a TIMESTAMP столбец, текущая дата и время вставляются. Если Вы вставляете NULL в целочисленный или столбец с плавающей точкой, который имеет AUTO_INCREMENT атрибут, следующее число в последовательности вставляется.