navicat數(shù)據(jù)庫(kù)查詢語(yǔ)句 做程序時(shí),如果某個(gè)查詢方法應(yīng)當(dāng)返回一條記錄,但是查出來(lái)多條,是拋異常好還是從多條中取第一條好?
做程序時(shí),如果某個(gè)查詢方法應(yīng)當(dāng)返回一條記錄,但是查出來(lái)多條,是拋異常好還是從多條中取第一條好?本人10年開(kāi)發(fā)培訓(xùn)經(jīng)驗(yàn),期間經(jīng)歷了Java Web,Android,H5,大數(shù)據(jù),PHP等多個(gè)不同的方向的
做程序時(shí),如果某個(gè)查詢方法應(yīng)當(dāng)返回一條記錄,但是查出來(lái)多條,是拋異常好還是從多條中取第一條好?
本人10年開(kāi)發(fā)培訓(xùn)經(jīng)驗(yàn),期間經(jīng)歷了Java Web,Android,H5,大數(shù)據(jù),PHP等多個(gè)不同的方向的開(kāi)發(fā),也做過(guò)軟件培訓(xùn)公司的金牌講師,很有興趣回答你這個(gè)問(wèn)題。
你這個(gè)問(wèn)題已經(jīng)把需求說(shuō)明的很清楚了,”某個(gè)查詢方法應(yīng)當(dāng)返回一條記錄,但是查出來(lái)多條“!也就是說(shuō),你的這個(gè)查詢只應(yīng)該有一個(gè)結(jié)果,但是在此時(shí)或者某些時(shí)候有了多個(gè)結(jié)果,那么就說(shuō)明你的這個(gè)業(yè)務(wù)接口可能不符合冪等性要求啊。根據(jù)冪等性設(shè)計(jì)原則,無(wú)論你怎么查,只要參數(shù)一樣,返回結(jié)果應(yīng)該一樣。
那么對(duì)于這種問(wèn)題該怎么解決,拋出異常?返回多條中的第一條?
我覺(jué)得都不是很完美的解決方案。
拋異常,這是有些人的一種解決方式,但是問(wèn)題解決了嗎?沒(méi)有??!問(wèn)題還在那里,下次觸發(fā)了這個(gè)條件,還是會(huì)拋異常。這就好比說(shuō),森林里有只虎,有一天吃了人,然后你不去解決老虎,只是在森林里掛了個(gè)牌子說(shuō):慎入,里面有虎!這......
然后返回多個(gè)結(jié)果中的第一條,其實(shí)這也不是一種好辦法,可能本就應(yīng)該只返回一條,為什么查詢到了多個(gè)呢?你數(shù)據(jù)庫(kù)里數(shù)據(jù)的唯一性做了校驗(yàn)了嗎?不說(shuō)別的,每次都查詢多個(gè)結(jié)果然后拿第一條數(shù)據(jù),你不覺(jué)得這很影響效率嗎?
所以要從根源上解決問(wèn)題!為什么會(huì)導(dǎo)致數(shù)據(jù)有多條?該人工排查數(shù)據(jù)就人工排查,該加鎖就加鎖,盡可能保證查詢時(shí)入?yún)⒁粯?,結(jié)果也一樣!
我從事互聯(lián)網(wǎng)開(kāi)發(fā)10年,主要的研究方向集中在Java web微服務(wù)架構(gòu)領(lǐng)域,Android移動(dòng)端研發(fā),HTML5前端方向,我會(huì)陸續(xù)寫(xiě)一些關(guān)于互聯(lián)網(wǎng)技術(shù)方面的文章,感興趣的朋友可以關(guān)注我,相信你一定會(huì)有所收獲。
如果有Java,Android,H5等開(kāi)發(fā)方面的問(wèn)題,或者是開(kāi)發(fā)求職方面的問(wèn)題,都可以在評(píng)論區(qū)留言,或者私信我。