有一个表A, userid 字段是唯一索引,现在要判断 userid=123456用户,是否存在表A中,如果不存在,则把这个用户插入表A。有两种方式
1.    select * from A where userid=123456;
if (返回为空)
   insert into A (userid) values(123456);
else
   return;
2.  不管有没有直接insert,如果报唯一索引异常,则表示存在,如果没报异常,就已经插入了。
我个人感觉第二种方法代码比较简单,但是担心有什么隐患。第一种方法,无形中会增加检索开销。
请大神指点下

解决方案 »

  1.   

    数据多时,第一种速度很慢,我们干过,后来换成第二种,反正是没出过异常。
    不过其实可以用INSERT IGNORE INTO,只是当时不知道这个命令。
      

  2.   


    可以考虑用mysql的 replace into ,如果存在就update,如果不存在就插入
      

  3.   

    如果 userid 字段是唯一索引没多大区别 
    第一种方法也不存在效率问题,更加正规一些
      

  4.   

    insert into ... on duplicate update ...参考手册中的语法。