Особенности NULL в Mysql

Особенности NULL в Mysql

Особенности использование NULL в Mysql

Понятие значения NULL является наиболее распространенным источником заблуждения для новичков в SQL, которые часто думают, что NULL - это то же самое, что и пустая строка ' ' .

Это совершенно не верно. Например, следующие операторы абсолютно разные:

 

mysql> INSERT INTO my_table (phone) VALUES (NULL);mysql> INSERT INTO my^table (phone) VALUES ( " ) ;

 

Оба оператора вставляют значение в столбец phone, но первый из них вставляет значение NULL, а второй - пустую строку. Смысл первого можно рассматривать как "номер телефона не известен", а смысл второго - как "известно, что у этого человека нет теле- фона, а, следовательно, у него нет и номера телефона". С обработкой NULL помочь могут операции IS NULL и NOT NULL, а также функция IFNULLO.

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

 

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

Для поиска в столбцах значений NULL использовать критерий выражение - NULL нельзя. Следующий оператор не возвращает никаких строк, поскольку выражение = 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 или выше, а также механизм хранения My ISAM, innoDB или BDB. Начиная с MySQL 4.0.2, механизмом хранения MEMORY также поддерживаются значения NULL в индексах. Во всех остальных случаях потребуется объявлять индексированные таблицы с помощью NOT NULL, а также вставить NULL в столбец будет невозможно. При считывании данных с помощью LOAD DATA INFILE пустые или недостающие столбцы обновляются со значениями ''. Если нужно в столбец занести значение NULL, используйте \N в файле данных. В определенных обстоятельствах также может использоваться и литеральное слово "NULL".

 

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

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

 

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

 

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

Комментарии (1)
  • Алексей Вторник 18 Июнь 2013
    Спасибо большое за статью!
Добавить комментарий
Вам необходимо включить показ изображений в браузере для того чтобы увидеть код

Дайте нам знать, что вы - живой человек. Для нас это важно!
Кликните, если плохо видно

Прежде чем высказать свое мнение, прочитайте пожалуйста: правила

Рейтинг@Mail.ru