java技術研究

          統計

          留言簿(3)

          閱讀排行榜

          評論排行榜

          插入重復 并發


            場景:一般情況下,我們注冊一個用戶名,判斷是否重復

            select count(name) from employee

             如果返回值大于0,說明已經存在了,不能用這個用戶名注冊,但是,并發情況下(load runner并發測試),同時注冊十個,會插入多條相同用戶名!

          這時候,就要找到相應的解決方案了!經過測試,得出正確方法,給name字段添加唯一約束

            具體寫法:

            alter table employees
            add constraint CK_st unique(name)

           

            測試通過,不會插入重復記錄!

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

           

            由此,總結了一些約束的用法

            主鍵(primary key)約束:

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

           

            核對(check)約束

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

           

            默認(default)約束

            alter table employees
            add constraint CK_Pass default'111' for  Pass--密碼默認為'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)--唯一約束和主鍵約束的區別是唯一約束可以為空,主鍵約束不可以為空,主鍵約束也是唯一約束

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

          評論

          # re: 插入重復 并發 2013-05-13 17:20 abin

          除了sql,你沒有用java來處理過嗎?  回復  更多評論   

          # re: 插入重復 并發[未登錄] 2013-11-03 23:25 qing

          A線程執行完save,然后select count(name) from employee=1,這時事務還沒提交,然后
          B線程才開始save,然后select count(name) from employee也會是=1,然后A線程才開始提交,最后B線程也提交,最終還是2條?雖然我沒測,不過用count的方法應該是不行的
            回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 自治县| 阳高县| 六盘水市| 紫阳县| 岳阳县| 封丘县| 乡宁县| 陆河县| 剑川县| 正镶白旗| 福鼎市| 云浮市| 保亭| 共和县| 顺义区| 墨竹工卡县| 黄山市| 绥芬河市| 桦南县| 扬中市| 历史| 京山县| 虎林市| 房产| 青川县| 交口县| 鱼台县| 长治县| 丹巴县| 呼伦贝尔市| 巴楚县| 左云县| 武汉市| 泽库县| 香河县| 阿鲁科尔沁旗| 涪陵区| 潜江市| 开远市| 芒康县| 大理市|