java技術(shù)研究

          統(tǒng)計(jì)

          留言簿(3)

          閱讀排行榜

          評(píng)論排行榜

          插入重復(fù) 并發(fā)


            場(chǎng)景:一般情況下,我們注冊(cè)一個(gè)用戶名,判斷是否重復(fù)

            select count(name) from employee

             如果返回值大于0,說(shuō)明已經(jīng)存在了,不能用這個(gè)用戶名注冊(cè),但是,并發(fā)情況下(load runner并發(fā)測(cè)試),同時(shí)注冊(cè)十個(gè),會(huì)插入多條相同用戶名!

          這時(shí)候,就要找到相應(yīng)的解決方案了!經(jīng)過(guò)測(cè)試,得出正確方法,給name字段添加唯一約束

            具體寫(xiě)法:

            alter table employees
            add constraint CK_st unique(name)

           

            測(cè)試通過(guò),不會(huì)插入重復(fù)記錄!

            還有一種方法,考慮用事務(wù),插入數(shù)據(jù)完成后,執(zhí)行select count(name) from employee,如果>1,則回滾事務(wù),提示注冊(cè)失敗!

           

            由此,總結(jié)了一些約束的用法

            主鍵(primary key)約束:

            alter table employees
            add constraint CK_PrimaryId primary key(EmployeeId)--主鍵會(huì)自動(dòng)添加約束

           

            核對(duì)(check)約束

            alter table employees
            add constraint CK_EmployeeType check(EmployeeType>1 and EmployeeType<5)--限制EmployeeType取值范圍

           

            默認(rèn)(default)約束

            alter table employees
            add constraint CK_Pass default'111' for  Pass--密碼默認(rèn)為'111'

           

            外鍵(foreign key)約束

            alter table employees
            add constraint CK_EmployeeId foreign key(employeeid)
            references EmployeeRange(employeeid)

            --保持表employees的employeeid字段和表EmployeeRange的employeeid字段一致

           

            唯一(unique)約束

            alter table employees
            add constraint CK_st unique(name)--唯一約束和主鍵約束的區(qū)別是唯一約束可以為空,主鍵約束不可以為空,主鍵約束也是唯一約束

          posted on 2012-05-11 13:23 小秦 閱讀(1210) 評(píng)論(2)  編輯  收藏

          評(píng)論

          # re: 插入重復(fù) 并發(fā) 2013-05-13 17:20 abin

          除了sql,你沒(méi)有用java來(lái)處理過(guò)嗎?  回復(fù)  更多評(píng)論   

          # re: 插入重復(fù) 并發(fā)[未登錄](méi) 2013-11-03 23:25 qing

          A線程執(zhí)行完save,然后select count(name) from employee=1,這時(shí)事務(wù)還沒(méi)提交,然后
          B線程才開(kāi)始save,然后select count(name) from employee也會(huì)是=1,然后A線程才開(kāi)始提交,最后B線程也提交,最終還是2條?雖然我沒(méi)測(cè),不過(guò)用count的方法應(yīng)該是不行的
            回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 孝义市| 财经| 邢台县| 潍坊市| 启东市| 马关县| 乐山市| 温泉县| 盘锦市| 望城县| 仪征市| 资阳市| 巴青县| 洱源县| 柯坪县| 渭源县| 盐池县| 马关县| 十堰市| 寻乌县| 锦州市| 塔城市| 潮州市| 沈丘县| 嘉荫县| 贵德县| 普宁市| 沙河市| 永顺县| 无极县| 巫溪县| 墨江| 安徽省| 曲水县| 新巴尔虎右旗| 逊克县| 余庆县| 股票| 乌拉特后旗| 南开区| 苍南县|