Есть ли причина не использовать <=> (нулевой безопасный оператор равенства) в mysql вместо =?
MySQL предоставляет приятный оператор <=>
, который работает с сравнениями, которые могут содержать нуль, например null <=> null
или null <=> 5
и т.д., что дает интуитивные результаты как многие языки программирования. В то время как нормальный оператор equals всегда просто возвращает null, который улавливает многих новых пользователей MySQL, таких как я сам.
Есть ли причина, по которой MySQL имеет обе функции, а не JUST функциональность в <=>
? Кому действительно нужен оператор, который эффективно undefined со встроенными языковыми типами?
Ответы
Ответ 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 и трехзначной логикой