一般情况下都是判断
"select * from userTable where username='" + username + "'";
如果用户名不存在则执行
@"INSERT INTO [user].[dbo].[userTable]
                                   ([username]
                                   ,[password]
                                   ,[email])
                                VALUES
                                   (
                                   '{0}',
                                   '{1}',
                                   '{2}')";
如果并发高的情况下应该怎么处理,几个同时注册同一个用户名,判断是时候都是不存在,最后一起执行insert就会出现两个用户名相同的情况,请问应该怎么处理

解决方案 »

  1.   

    用ajax验证用户是否存在,不会出现你这种情况的。,这样根本提交不了
      

  2.   

    有两个问题,
    1、用户浏览器把js关了。
    2、几个用户同时在注册页面,此时大家都ajax检查了用户了,然后一个用户先提交了,那AJAX检查就起不到作用了。
      

  3.   

    用ajax处理 如果用户把js禁用 提示必须启用不就好了
      

  4.   

    就算是高并发的,我觉得你说的情况也不太可能发生,可以做个测试,简单的编写一个多线程,开启100+的线程去调用你注册用户的方法,看看结果是如何?还有就是如果还有担心,可以lock一下
      

  5.   

    提交的时候在判断一次,谁是只在ajax判断,后台还会在判断一次的
      

  6.   

    楼上说的都太麻烦. .... 而且好像都没解决问题, 这就是个原子性的问题. ....解决办法:
    首先将用户名设置为不可重复的. 
    其次:
    try{
    //直接insert 
    }catch(...){}ok!
      

  7.   

    数据库里面把username字段设置为主键
      

  8.   

    1、如上面所说的加唯一约束,或者简单点直接在username上建立主键;2、并发的话还是会造成多个相同用户名的问题,建表锁,使用事务,修改隔离等级。
      

  9.   

    前后台 共同验证 前台提供 用户主动验证 用Ajax 验证,后台 用判断验证是否存在
      

  10.   


    我觉得现在是有问题就得解决问题,而不是考虑这个问题发生的概率是多少。
    做项目,我们就得考虑到最完美化。
    楼上很多人都说了,可以在数据库中设置主键。或者用ajax验证判断。
      

  11.   


    我觉得现在是有问题就得解决问题,而不是考虑这个问题发生的概率是多少。
    做项目,我们就得考虑到最完美化。
    楼上很多人都说了,可以在数据库中设置主键。或者用ajax验证判断。