java技術研究

          導航

          <2013年5月>
          2829301234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          隨筆分類

          隨筆檔案

          統計

          留言簿(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 小秦 閱讀(1210) 評論(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的方法應該是不行的
            回復  更多評論   


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


          網站導航:
           
          主站蜘蛛池模板: 渭源县| 社旗县| 伊春市| 渝北区| 喜德县| 白城市| 济阳县| 囊谦县| 武夷山市| 巍山| 宁陵县| 黔东| 阿巴嘎旗| 仁化县| 温泉县| 隆化县| 如东县| 义乌市| 舒兰市| 河津市| 竹北市| 贵定县| 卫辉市| 武强县| 旬邑县| 新野县| 山西省| 衡东县| 泗洪县| 历史| 平南县| 浦东新区| 永登县| 榆树市| 郎溪县| 北碚区| 永善县| 科技| 鸡泽县| 扎兰屯市| 通许县|