插入重复 并发
场景:一般情况下,我们注册一个用户名,判断是否重复
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)--唯一约束和主键约束的区别是唯一约束可以为空,主键约束不可以为空,主键约束也是唯一约束