一个 SQL 同时验证帐号是否存在、密码是否正确
出處:http://www.cnblogs.com/jacklondon/archive/2012/01/13/2321686.html近日偶爾看到一個(gè)很巧妙的 SQL 技巧,一個(gè)簡(jiǎn)單的 SQL 同時(shí)驗(yàn)證帳號(hào)是否存在、密碼是否正確。之前從未曾想過這么做,也未曾見過別人這么做。雖是奇技淫巧,卻真正所謂構(gòu)思巧妙。如果用來面試考考別人,真的能夠難倒一大片兄弟。好東西不敢獨(dú)享,特公開與大家同樂。
SELECT CASE WHEN p.encrypted_password =? THEN 1 ELSE 0 END FROM tm_app_user u, tm_app_user_credential p WHERE u.app_user_uuid = p.app_user_uuid AND (LOWER(u.user_sign_in_nm) = ? OR LOWER(u.email) = ?)
解釋:
a. 如果用戶名不存在,則查詢結(jié)果是無數(shù)據(jù)
b. 如果用戶名存在,而密碼不正確,則返回 0
c. 如果用戶名存在,而密碼正確,則返回 1
之所以把密碼單獨(dú)用一個(gè)表保存,是因?yàn)橛脩舻钠渌畔?#xff08;用戶名、郵件、電話)與密碼是兩種不同性質(zhì)的東西,系統(tǒng)架構(gòu)師決定分開保存,有助于提醒程序員這種差別: 用戶的其他信息可以查看,密碼不能查看;用戶的其他信息更改時(shí)可以看到更改前的數(shù)據(jù),密碼更改時(shí)不能看到更改前的數(shù)據(jù);修改用戶密碼與修改用戶其他信息,是兩個(gè)不同頁面。雖說程序員普遍有“文人相輕”的毛病(讀書人互相瞧不起),但看到這個(gè) SQL,不能不讓人佩服。
轉(zhuǎn)載于:https://www.cnblogs.com/wqvbjhc/archive/2012/01/14/2465086.html
總結(jié)
以上是生活随笔為你收集整理的一个 SQL 同时验证帐号是否存在、密码是否正确的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从零开始学数据分析之——《微积分》第一章
- 下一篇: pip 安装