MySQL 提供了一个很好的运算符<=>
,可以处理可能包含 null 的比较,例如null <=> null
ornull <=> 5
等。与许多编程语言一样,返回直观的结果。而普通的 equals 运算符总是只返回 null,这让许多新的 MySQL 用户(比如我自己)犯了错误。
是否有原因 MySQL 两者兼而有之,而不仅仅是其中的功能<=>
?谁真正需要使用内置语言类型有效地未定义的运算符?
MySQL 提供了一个很好的运算符<=>
,可以处理可能包含 null 的比较,例如null <=> null
ornull <=> 5
等。与许多编程语言一样,返回直观的结果。而普通的 equals 运算符总是只返回 null,这让许多新的 MySQL 用户(比如我自己)犯了错误。
是否有原因 MySQL 两者兼而有之,而不仅仅是其中的功能<=>
?谁真正需要使用内置语言类型有效地未定义的运算符?
谁真正需要使用内置语言类型有效地未定义的运算符?
您要求提供一些真实世界的示例。这是一个虚假的。假设您有一个住宿青年计划或类似项目,其中一个要求是孩子们只能与同性的人共用一个房间。您的数据库中有一个可为空的 M/F 字段 - 可以为空,因为您的数据馈送不完整(您仍在追踪一些数据)。你的房间匹配代码绝对不应该匹配 t1.Gender<=>t2.Gender 的学生,因为它最终可能匹配两个性别未知的孩子,他们可能是异性。相反,您匹配它们相等而不是两者都为空的位置。
这只是一个例子。我承认这些年来操作符NULL
和=
操作符的行为引起了很多混乱,但归根结底,错误可能在于过多的在线 MySQL 教程,没有提及如何NULL
与操作符交互,也没有提及操作符的存在<=>
。
mySQL 和编程语言中的 null 之间的最大区别在于,在 mySQL 中,null 表示未知值,而在编程中它表示未定义值。
在 mySQL 中,null 不等于 null(未知不等于未知)。在编程语言中,null 确实等于 null(未定义等于未定义)。
谁真正需要使用内置语言类型有效地未定义的运算符?
您还需要它来处理数据库内的关系。特别是如果您使用外键约束。
例如,如果您有一个任务表(在您的公司中)。然后您将这些任务分配给员工。所以你有一个从你的任务表到你的员工表的关系。
并且总会有一些未分配的任务。在这种情况下,您用于与员工表的关系的任务表中的字段将包含NULL
. 这将确保该任务未分配。这意味着:不可能与employees表有关系。
如果NULL = NULL
是true
,那么在我的示例中,员工表中的外键总是有可能也是NULL
。因此,该任务将分配给一名或几名员工。而且您永远无法确定某项任务是否已分配给某个员工。
MySql 两者兼有而不仅仅是 <=> 中的功能是否有原因?运营商完全不同。
<=>
像运算符一样执行相等比较=
,但返回1
而不是NULL
如果两个操作数都是NULL
,0
而不是NULL
如果一个操作数是NULL
。
谁真正需要使用内置语言类型有效地未定义的运算符?
这个要看具体情况,你没遇到过这种情况,不代表没人需要。