插入重复 并发

  场景:一般情况下,我们注册一个用户名,判断是否重复

  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 @ 2010-05-24 15:48  艾伦  阅读(482)  评论(0编辑  收藏  举报