我觉得这真的很奇怪。我不明白为什么该问题的解决方案会以这种方式工作,有人可以解释一下解决方案吗?
这在 mysql 文档中有所说明:
如果你引用一个没有被初始化的变量,它的值是 NULL 和一个字符串类型。
如果在使用它之前将变量设置为 NULL,为什么它会有所不同,如果这是未初始化变量的默认值呢?
(我知道,这是非常肮脏的编程,不是初始化变量,但我仍然想了解行为。)
我觉得这真的很奇怪。我不明白为什么该问题的解决方案会以这种方式工作,有人可以解释一下解决方案吗?
这在 mysql 文档中有所说明:
如果你引用一个没有被初始化的变量,它的值是 NULL 和一个字符串类型。
如果在使用它之前将变量设置为 NULL,为什么它会有所不同,如果这是未初始化变量的默认值呢?
(我知道,这是非常肮脏的编程,不是初始化变量,但我仍然想了解行为。)
有两种方法可以从查询中设置变量,并且它们的行为不同,尤其是在没有匹配记录时。
你可以
SELECT ... INTO
把变量...或者,您可以
SET
将其设为标量子查询返回的值。说明与示例数据库的区别...
我们的变量开始了
NULL
。我们匹配了一行并设置了我们的变量。
我们尝试选择一条不存在的记录:
那么现在我们的变量中有什么?
我认为这解释了混乱。当没有找到行时,该变量与其先前的值保持不变......所以这并不是说您必须“在使用之前将其设置为 null”,而是您必须在再次使用之前将其重置为 null,如果您正在做类似的事情
SELECT ... INTO
,如果没有找到任何东西,则不会重置该值。另一方面,如果我们使用 other 构造,则在没有匹配记录时重置变量。
这意味着您无法在更多字段上获得 NULL 行为,除非您使用
或者有没有办法写
? 谢谢克劳斯