這道小小的數(shù)據(jù)庫面試題,竟然難倒了那么多的英雄好漢
描述一下問題的背景,為了簡化起見,假定一個表里只有兩個字段,一個id,一個是name,name字段的數(shù)據(jù)類型為varchar,可以為空,表里的數(shù)據(jù)只有一行,如下所示:

問題來了:如果我要查詢name等于john的記錄,sql也就是像下面這樣子,會返回記錄嗎?
select * from test_null where name = 'john';對于這個問題,幾乎所有人都可以回答正確,很顯然,表里的記錄,name字段的值為null,它當然不等于john,肯定就不會返回任何記錄了。
然后我接著追問,如果我要查詢name不等john的數(shù)據(jù),會返回記錄嗎?sql如下:
select * from test_null where name <> 'john';這個時候答案就開始變得五花八門了,要么很確定的認為會返回記錄,畢竟null值肯定不等于john嘛;要么回答得吞吞吐吐,面試者可能會想,既然這么問應該是有什么坑,但也不知道原因到底是什么的,即使回答正確也可以說是蒙的。當然,也有一些人能夠正確回答并清楚地解釋原因,但這樣的候選人大概只占到30%左右,這的確讓我感覺到很驚訝,null值是數(shù)據(jù)庫中非常常見的東西,必須要對它掌握清楚都可以更好的進行編程啊。
當然,正確答案就是不會返回記錄,因為null值表示不確定,有可能是這個值,也有可能是那個值,難以捉摸,任何值跟null比較都會返回null,所以上面的sql就不會返回記錄了。
由此看來,MySQL中的null是很多人的知識盲點,如果本篇文章的在看數(shù)超過10,我后續(xù)會專門寫一篇深入剖析的文章,歡迎大家支持。原創(chuàng)不易,您的點贊、在看、轉發(fā)是對我的最大支持。
如果本篇文章的在看數(shù)超過10,我后續(xù)會專門寫一篇深入剖析null值的文章
如果本篇文章的在看數(shù)超過10,我后續(xù)會專門寫一篇深入剖析null值的文章
如果本篇文章的在看數(shù)超過10,我后續(xù)會專門寫一篇深入剖析null值的文章
推薦閱讀:
Redis 高可用篇:你管這叫 Sentinel 哨兵集群原理
超硬核!程序員10種副業(yè)賺錢之道,實現(xiàn)月收入增加20k!
歡迎關注微信公眾號:互聯(lián)網(wǎng)全棧架構,收取更多有價值的信息。
