場景:一般情況下,我們注冊(cè)一個(gè)用戶名,判斷是否重復(fù)
select count(name) from employee
如果返回值大于0,說明已經(jīng)存在了,不能用這個(gè)用戶名注冊(cè),但是,并發(fā)情況下(load runner并發(fā)測試),同時(shí)注冊(cè)十個(gè),會(huì)插入多條相同用戶名!
這時(shí)候,就要找到相應(yīng)的解決方案了!經(jīng)過測試,得出正確方法,給name字段添加唯一約束
具體寫法:
alter table employees
add constraint CK_st unique(name)
測試通過,不會(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ū)別是唯一約束可以為空,主鍵約束不可以為空,主鍵約束也是唯一約束