Подтвердить что ты не робот

Есть ли причина не использовать <=> (нулевой безопасный оператор равенства) в mysql вместо =?

MySQL предоставляет приятный оператор <=>, который работает с сравнениями, которые могут содержать нуль, например null <=> null или null <=> 5 и т.д., что дает интуитивные результаты как многие языки программирования. В то время как нормальный оператор equals всегда просто возвращает null, который улавливает многих новых пользователей MySQL, таких как я сам.

Есть ли причина, по которой MySQL имеет обе функции, а не JUST функциональность в <=>? Кому действительно нужен оператор, который эффективно undefined со встроенными языковыми типами?

4b9b3361

Ответ 1

Кому действительно нужен оператор, который эффективно undefined со встроенными языковыми типами?

Вы попросили примеры из реального мира. Вот паразитный. Скажите, что у вас есть молодежная молодежная программа или аналогичная, и одним из требований является то, что дети разделяют комнату только с кем-то одного пола. У вас есть нулевое поле M/F в вашей базе данных - обнуляется, потому что ваш фид данных неполный (вы все еще преследуете некоторые данные). Ваш код, соответствующий вашему номеру, должен определенно не соответствовать студентам, где t1.Gender <= > t2.Gender, потому что это может привести к совпадению двух детей неизвестного пола, которые могут быть противоположными полами. Вместо этого вы сопоставляете, где они равны, а не оба нулевые.

Вот только один пример. Я признаю, что поведение операторов NULL и = вызвало много путаницы на протяжении многих лет, но в конечном итоге ошибка, вероятно, связана с множеством онлайн-руководств MySQL, в которых не упоминается, как NULL взаимодействует с операторами, ни о существовании оператора <=>.

Ответ 2

Большая разница между нулевым значением в mySQL и языками программирования заключается в том, что в mySQL значение null означает неизвестное значение при программировании означает значение undefined.

В mySQL значение null не равно null (неизвестное значение не равно неизвестно). Хотя в языках программирования значение null равно null (undefined равно undefined).

Ответ 3

Кому действительно нужен оператор, который эффективно undefined со встроенным в языковых типах?

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

например, если у вас есть таблица задач (в вашей компании). то вы назначаете эти задачи сотрудникам. поэтому у вас есть отношение из таблицы задач к таблице ваших сотрудников.
и всегда будут какие-то невыделенные задачи. в этом случае поле вашей таблицы задач, которое вы используете для связи с таблицей сотрудников, будет содержать NULL. это гарантирует, что эта задача не назначена. что означает: нет никакой возможности, что существует отношение к таблице сотрудников.

if NULL = NULL будет true, тогда в моем примере всегда будет возможность, чтобы внешний ключ в таблице employee также был NULL. таким образом, задача будет назначена одному или нескольким сотрудникам. и вы никогда не сможете точно знать, какая задача назначена для какого-то сотрудника или нет.

Ответ 4

Есть ли причина, по которой у MySql есть и не JUST функциональность в <= > ? Операторы полностью отличаются друг от друга.

<=> выполняет сравнение равенства, как оператор =, но возвращает 1, а не NULL, если оба операнда NULL и 0, а не NULL, если один операнд NULL.

Кому действительно нужен оператор, который эффективно undefined со встроенным в языковых типах?

Это зависит от случая, просто потому, что вы не сталкивались с такими случаями, не означает, что никто не нуждается в нем.

Ответ 5

Да.

Это должно быть потому, что реляционные базы данных используют теорию трехзначную логику (TRUE, NULL, FALSE).

И трехзначная логика должна работать так, потому что она должна быть внутренне непротиворечивой.

Это следует из правил математики.

Сравнение с NULL и трехзначной логикой