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的方法應該是不行的
            回復  更多評論   


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


          網站導航:
           
          主站蜘蛛池模板: 鸡泽县| 那坡县| 东阳市| 桑植县| 包头市| 蒲江县| 新和县| 修水县| 遵义市| 兰坪| 克山县| 翁牛特旗| 金塔县| 历史| 观塘区| 金湖县| 四子王旗| 翁牛特旗| 漾濞| 双桥区| 桂阳县| 万全县| 三原县| 蕉岭县| 永和县| 宣威市| 寿阳县| 嘉义市| 许昌市| 崇礼县| 巴南区| 静海县| 虞城县| 纳雍县| 富宁县| 泽普县| 中宁县| 洛扎县| 扶风县| 当雄县| 内丘县|