这道小小的数据库面试题,竟然难倒了那么多的英雄好汉
描述一下问题的背景,为了简化起见,假定一个表里只有两个字段,一个id,一个是name,name字段的数据类型为varchar,可以为空,表里的数据只有一行,如下所示:
问题来了:如果我要查询name等于john的记录,sql也就是像下面这样子,会返回记录吗?
select * from test_null where name = 'john';
对于这个问题,几乎所有人都可以回答正确,很显然,表里的记录,name字段的值为null,它当然不等于john,肯定就不会返回任何记录了。
然后我接着追问,如果我要查询name不等john的数据,会返回记录吗?sql如下:
select * from test_null where name <> 'john';
这个时候答案就开始变得五花八门了,要么很确定的认为会返回记录,毕竟null值肯定不等于john嘛;要么回答得吞吞吐吐,面试者可能会想,既然这么问应该是有什么坑,但也不知道原因到底是什么的,即使回答正确也可以说是蒙的。当然,也有一些人能够正确回答并清楚地解释原因,但这样的候选人大概只占到30%左右,这的确让我感觉到很惊讶,null值是数据库中非常常见的东西,必须要对它掌握清楚都可以更好的进行编程啊。
当然,正确答案就是不会返回记录,因为null值表示不确定,有可能是这个值,也有可能是那个值,难以捉摸,任何值跟null比较都会返回null,所以上面的sql就不会返回记录了。
由此看来,MySQL中的null是很多人的知识盲点,如果本篇文章的在看数超过10,我后续会专门写一篇深入剖析的文章,欢迎大家支持。原创不易,您的点赞、在看、转发是对我的最大支持。
如果本篇文章的在看数超过10,我后续会专门写一篇深入剖析null值的文章
如果本篇文章的在看数超过10,我后续会专门写一篇深入剖析null值的文章
如果本篇文章的在看数超过10,我后续会专门写一篇深入剖析null值的文章
推荐阅读:
Redis 高可用篇:你管这叫 Sentinel 哨兵集群原理
欢迎关注微信公众号:互联网全栈架构,收取更多有价值的信息。