Spec-Zone.ru › MySQL 8.4

5.3.4.6 Работа с NULL-значениями

Значение NULL может быть неожиданным, пока вы к нему не привыкнете. По сути, NULL означает “отсутствующее неизвестное значение”, и оно обрабатывается несколько иначе, чем другие значения.

Для проверки на наличие NULL используйте операторы IS NULL и IS NOT NULL, как показано здесь:

mysql> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
|         0 |             1 |
+-----------+---------------+

Вы не можете использовать арифметические операторы сравнения, такие как =, < или <>, для проверки на NULL. Чтобы продемонстрировать это, попробуйте выполнить следующий запрос:

mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;
+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
|     NULL |      NULL |     NULL |     NULL |
+----------+-----------+----------+----------+

Поскольку результат любого арифметического сравнения с NULL также является NULL, из таких сравнений нельзя получить осмысленных результатов.

В MySQL 0 или NULL означает ложь, а всё остальное — истину. Значение по умолчанию для булевых операций — это 1.

Такое специальное обращение с NULL объясняет, почему в предыдущем разделе для определения животных, которые больше не живы, необходимо было использовать death IS NOT NULL вместо death <> NULL.

Два значения NULL считаются равными в GROUP BY.

При выполнении ORDER BY значения NULL выводятся первыми, если вы выполняете ORDER BY ... ASC, и последними, если выполняете ORDER BY ... DESC.

Распространённая ошибка при работе с NULL заключается в предположении, что невозможно вставить ноль или пустую строку в столбец, определённый как NOT NULL, но это не так. На самом деле, это значения, тогда как NULL означает “не имеющее значения.” Вы можете легко проверить это, используя IS [NOT] NULL, как показано:

mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
|         0 |             1 |          0 |              1 |
+-----------+---------------+------------+----------------+

Таким образом, вполне возможно вставить ноль или пустую строку в столбец NOT NULL, так как это фактически NOT NULL. См. Раздел B.3.4.3 «Проблемы с NULL-значениями».

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/working-with-null.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API