1. 程式人生 > >insert中加入where條件判斷,解決插入重複資料的問題

insert中加入where條件判斷,解決插入重複資料的問題

對於會員註冊,我們經常會做唯一性驗證,通常情況下我們有這兩種方式:
1. 資料庫表設計的時候loginName增加唯一約束
2. 註冊之前先查一下然後再去進行插入操作

針對以上兩種情況,第一種情況,增加約束的話,是最有效的,但如果表結構已經確定了,再修改起來反而不太好,所以這裡不多說。

我們這裡就只說第二種情況,這種情況看似無懈可擊,但是確實有致命的bug,如果兩個人同時填好註冊資訊,數123一起點註冊按鈕,那麼極有可能出現的情況就是兩個人都能夠註冊成功,然後資料庫就產生了兩條資料。

雖然這種概率比較低,但使用者數量上去了,這種情況也是有可能出現的。

下面用sql的方式處理這個問題:

insert into member(id,loginName,password)
select nextval('S_T_MEMBER'),${loginName},${password}
from member
where not exists(select id from member where loginName = ${loginName});

--上面的sql是配置在xml檔案中的,相信玩過SSH或者SSI的同學們應該都能夠領會其中的精神,不過這裡還是解釋下。
--nextval('S_T_MEMBER'):下一個自增id
--${loginName}:傳入的引數
--${password}:傳入的引數
--如果where條件不滿足,那麼insert就不會執行,返回的影響條數必然是0 --如果where條件滿足,那麼就是說相同的loginName不存在,那麼insert會執行select出來的結果集,而這個結果集肯定只有一條而且就是我們傳進來的引數,返回的影響條數肯定是1

至此問題解決了。