Что означает null в базах данных

NULL поля в MySQL

Вступление

Часто на форумах и даже в учебниках пишут о том, что лучше не использовать NULL поля в MySQL. В этих утверждениях смущает тот факт, что никто не удосуживается объяснить, почему NULL – это зло. Эта заметка призвана разобраться, что такое NULL в MySQL и так ли страшен чёрт, как его малюют.

Что такое NULL?

Наряду с множеством типов данных в БД, NULL стоит особняком. NULL означает отсутствие значения.
Зачем использовать особый тип данных для того, чтоб указать отсутствие значения, когда можно просто вставить пустую строку, например? Этот вопрос мне всегда казался глупым, и я удивляюсь тому, как в книгах и статьях уделяют ему достаточное количество внимания.

Чем опасен NULL?

Сравнение NULL с любым другим значением, даже с родственным (в большинстве языков программирования, в частности, в PHP null, 0, false это одно и то же, если не применять строгого сравнения, которое включает сравнение типов) ему FALSE вернёт NULL. Отсюда следует первая ловушка.
Допустим, у нас есть таблица:

Добавим в неё 2 записи:

INSERT INTO users (name, family) VALUES(‘Андрей’, ‘Романов’), (‘Иван’, NULL);

В случае, если вы захотите объединить имя и фамилию, получив ФИО одним полем, например, таким запросом:

SELECT CONCAT(name, ‘ ‘, family) FROM `users`

MySQL не оправдает ваших ожиданий. Вы получите NULL вместо Ивана.

Что означает null в базах данных. Смотреть фото Что означает null в базах данных. Смотреть картинку Что означает null в базах данных. Картинка про Что означает null в базах данных. Фото Что означает null в базах данных

Немного неожиданно, правда?
На деле же ничего неожиданного нет, если вы помните, что любая операция с NULL вернёт NULL, кроме специальных операций, предназначенных для работы с NULL: IS NULL, IS NOT NULL, IFNULL()

Сортировка по NULL

Всего лишь хочу опровергнуть некоторые фразы из русского мануала MySQL о том, что при сортировке по столбцу, содержащим NULL значения, эти самые NULL значиния всега оказываются наверху. Это не так.

SELECT name, family FROM `users` ORDER BY family ASC

Что означает null в базах данных. Смотреть фото Что означает null в базах данных. Смотреть картинку Что означает null в базах данных. Картинка про Что означает null в базах данных. Фото Что означает null в базах данных

SELECT name, family FROM `users` ORDER BY family DESC

Что означает null в базах данных. Смотреть фото Что означает null в базах данных. Смотреть картинку Что означает null в базах данных. Картинка про Что означает null в базах данных. Фото Что означает null в базах данных

Как видим, NULL считается наименьшим значением, и порядок сортировки на него действует.

Группировки и NULL

Все просто.
MySQL группирует по NULL так же как и по любому другому полю.

Добавим нашей таблице users столбец score INT UNSIGNED NULL;

Что означает null в базах данных. Смотреть фото Что означает null в базах данных. Смотреть картинку Что означает null в базах данных. Картинка про Что означает null в базах данных. Фото Что означает null в базах данных

Подсчитаем сколько всего пользователей набрали то или иное количество очков, т.е. сгруппируем выборку по полю score
SELECT COUNT(*), score FROM `users` GROUP BY score

Что означает null в базах данных. Смотреть фото Что означает null в базах данных. Смотреть картинку Что означает null в базах данных. Картинка про Что означает null в базах данных. Фото Что означает null в базах данных

Как видно, MySQL сгруппировала 2 строки с score = NULL

Индексы и NULL

Откуда-то ходит заблуждение о том, что MySQL не использует индексы, если столбец может принимать значения NULL.
Это не так!

Проведём несколько экспериментов.

Выберем все записи, где score = NULL. Не забываем, что мы для этого должны использовать конструкцию IS NULL
EXPLAIN SELECT * FROM `users` WHERE score IS NULL

Что означает null в базах данных. Смотреть фото Что означает null в базах данных. Смотреть картинку Что означает null в базах данных. Картинка про Что означает null в базах данных. Фото Что означает null в базах данных

Индекс используется.

Выберем все записи, где количество очков больше, например, пяти.
EXPLAIN SELECT * FROM `users` WHERE `score` > 5

Что означает null в базах данных. Смотреть фото Что означает null в базах данных. Смотреть картинку Что означает null в базах данных. Картинка про Что означает null в базах данных. Фото Что означает null в базах данных

Индекс используется.

Найдем пользователя, у которого ровно 7 очков
EXPLAIN SELECT * FROM `users` WHERE `score` = 7

Что означает null в базах данных. Смотреть фото Что означает null в базах данных. Смотреть картинку Что означает null в базах данных. Картинка про Что означает null в базах данных. Фото Что означает null в базах данных

Индекс используется.

Можно сделать вывод: заблуждение действительно таковым и оказалось.
Можно смело использовать NULL-поля при создании индекса и индекс будет работать.

Когда следует использовать NULL?

Ранее я привел пример таблицы сайтов, которая содержит поле PR.
PR – это целочисленное значение, которое может принимать значение 0, к тому же оно может быть в состоянии «не посчитано». Как реализовать хранение такого свойства в таблице?

Зачем отказываться от того, что язык предлагает тебе «из коробки»?
Значение NULL для такого поля подходит идеально. NULL – означает «нет значения», т.е. оно ещё не посчитано. Если значение равно нулю, значит оно действительно равно нулю. Все просто.

Второй пример подходящего случая для использования NULL – это поле-потомок.

Поле-потомок указывает на id записи из другой (или же этой же таблицы). Примером такого поля может быть parent_id.

Выводы

Нет причин бояться создания NULL полей. Надо хорошо понимать, что NULL в MySQL это не ноль и не false – это отсутствие значения. Надо знать, как MySQL работает с NULL: нюансы есть, но их не много. У MySQL нет проблем с индексацией NULL полей.

Источник

NULL (SQL)

NULL в Системах управления базами данных (СУБД) — специальное значение (псевдозначение), которое может быть записано в поле таблицы базы данных (БД). NULL соответствует понятию «пустое поле», то есть «поле, не содержащее никакого значения». Введено для того, чтобы различать в полях БД пустые (визуально не отображаемые) значения (например, строку нулевой длины) и отсутствующие значения (когда в поле не записано вообще никакого значения, даже пустого).

NULL означает отсутствие, неизвестность информации. Значение NULL не является значением в полном смысле слова: по определению оно означает отсутствие значения и не принадлежит ни одному типу данных. Поэтому NULL не равно ни логическому значению FALSE, ни пустой строке, ни нулю. При сравнении NULL с любым значением будет получен результат NULL, а не FALSE и не 0. Более того, NULL не равно NULL!

Содержание

Необходимость NULL в реляционных БД

Использование NULL в БД

В БД, поддерживающих понятие NULL, для поля таблицы при описании определяется, может ли оно быть пустым. Если да, то в это поле можно не записывать никакого значения, и это поле будет иметь значение NULL. Также можно и явно записать в такое поле значение NULL.

Как правило, СУБД не разрешает значение NULL для полей, являющихся частью первичного ключа таблицы. В полях внешних ключей, напротив, NULL допускается. Наличие NULL в поле внешнего ключа может трактоваться как признак отсутствия связанной записи, и для такого внешнего ключа не требуется исполнение правил ссылочной целостности, обязательных для любого другого значения внешнего ключа.

Операции с NULL

Поскольку NULL не является, в общем смысле, значением, использование его в арифметических, строковых, логических и других операциях, строго говоря, некорректно. Тем не менее, большинство СУБД поддерживают такие операции, но вводят для них специальные правила:

Кроме того, могут существовать специальные системные функции для удобного преобразования NULL к определённым значениям, например, в Oracle имеется системная функция NVL, которая возвращает значение своего параметра, если он не NULL, или значение по умолчанию, если операнд — NULL. В стандарте SQL-92 определены две функции: NULLIF и COALESCE, поэтому их использование является более предпочтительным (если конкретная СУБД их реализует).

Источник

SQL Значение NULL

Что такое значение NULL?

Если поле в таблице является необязательным, то можно вставить новую запись или обновить запись без добавления значения в это поле. Затем поле будет сохранено с значением NULL.

Как проверить наличие NULL значений?

Вместо этого нам придется использовать оператор IS NULL и IS NOT NULL.

Синтаксис IS NULL

Синтаксис IS NOT NULL

Демо база данных

Ниже приведен выбор из таблицы «Customers» в образце базы данных Northwind:

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1

Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico4

Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

Оператор IS NULL

Оператор IS NULL используется для проверки пустых значений (NULL).

В следующем SQL файле перечислены все клиенты с значением NULL в поле «Address»:

Пример

Совет: Всегда используйте значение NULL для поиска значений NULL.

Оператор IS NOT NULL

Оператор IS NOT NULL используется для проверки непустых значений (NOT NULL).

В следующем SQL файле перечислены все клиенты со значением в поле «Address»:

Источник

Значения NULL в SQL

Дата публикации: 2017-12-08

Что означает null в базах данных. Смотреть фото Что означает null в базах данных. Смотреть картинку Что означает null в базах данных. Картинка про Что означает null в базах данных. Фото Что означает null в базах данных

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

Поле со значением NULL — это поле без значения. Важно понимать, что значение NULL отличается от нулевого значения или поля, содержащего пробелы.

Синтаксис

Основной синтаксис NULL при создании таблицы.

Что означает null в базах данных. Смотреть фото Что означает null в базах данных. Смотреть картинку Что означает null в базах данных. Картинка про Что означает null в базах данных. Фото Что означает null в базах данных

Бесплатный курс по PHP программированию

Освойте курс и узнайте, как создать динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Здесь NOT NULL означает, что для столбца должны всегда явно указываться соответствующие значения соответствующего типа данных. Для двух столбцов мы не использовали NOT NULL — это означает, что они могут содержать значение NULL.
Поле со значением NULL является полем, которое не было заполнено при создании записи.

Пример

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

Рассмотрим таблицу CUSTOMERS, содержащую следующие записи.

Что означает null в базах данных. Смотреть фото Что означает null в базах данных. Смотреть картинку Что означает null в базах данных. Картинка про Что означает null в базах данных. Фото Что означает null в базах данных

Теперь давайте используем оператор IS NOT NULL.

Источник

NULL в SQL

NULL — спец. знач. (псевдозначение) в ЯЗ SQL и большинстве СУБД, в частности, что может быть записано в поле таблицы БД.

Содержание

Синопсис

NULL не явл. каким-либо типом данных и соответствует понятию «пустое поле», т.е. «поле, не содержащее никакого значения». Введено для того, чтобы различать в полях БД пустые (визуально не отображаемые) значения (напр., строку нулевой длины) и отсутствующие значения, когда в поле не записано вообще никакого значения, даже пустого.

Использование NULL в БД

Как правило, СУБД не разрешает значение NULL для полей, являющихся частью первичного ключа таблицы. В полях внешних ключей, напротив, NULL допускается. Наличие NULL в поле внешнего ключа может трактоваться как признак отсутствия связанной записи, и для такого внешнего ключа не требуется исполнение правил ссылочной целостности, обязательных для любого другого значения внешнего ключа.

Проверка значения на NULL

Для проверки значения поля таблицы на пустоту (т.е. NULL ) используется выражение типа is NULL и is not NULL соответственно:

Операции с NULL

Поскольку NULL не является, в общем смысле, значением, использование его в арифметических, строковых, логических и других операциях, строго говоря, некорректно. Т.н.м., большинство СУБД поддерживают такие операции, но вводят для них специальные правила:

Подробнее о NULL

Предположим, что вы получили новую запись, которая ещё не была назначена записи из др. табл. Чем ждать внесения др. записи, к которой текущую нужно назначить, вы можете ввести запись в БД сразу же, так, что она не потеряется при перестановке. Вы можете ввести строку со знач. NULL в соотв. поле, и заполнить это поле позже, когда соотв. запись в др. табл. будет внесена.

Сравнение с NULL

Примеры

Найдем все записи в табл. Customers с знач. NULL в столбце city:

Здесь не будет никакого вывода, потому что мы не имеем никаких значений NULL в табл.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *