这道小小的数据库面试题,竟然难倒了那么多的英雄好汉

共 1319字,需浏览 3分钟

 ·

2021-04-19 09:47

在面试的时候,我经常会问一个关于MySQL的小知识点,让我吃惊的是,这个看起来非常简单的问题,竟然难倒了很多的面试者,不管是初出茅庐的大学生,还是工作三五年的软工程师,抑或是经验非常丰富的资深研发或者架构师,有相当大的比例都回答错了,这的确让我感觉比较震惊,于是带着一种好奇心一次次地在面试中问这个问题,但一次次的结论都证实了:很多人对这个小小的知识点都掌握不到位,所以我觉得有必要把它写出来,毕竟万丈高楼平地起,靠的还是坚实的基础,每一个关键的知识都必须掌握到位。

描述一下问题的背景,为了简化起见,假定一个表里只有两个字段,一个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值的文章


推荐阅读:

从面试角度一文学完 Kafka

数据库跟缓存的双写一致性

Redis 高可用篇:你管这叫 Sentinel 哨兵集群原理

Kafka原理篇:图解kakfa架构原理

架构设计方法论

超硬核!程序员10种副业赚钱之道,实现月收入增加20k!


互联网全栈架构


浏览 19
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报