假设某个表中,Name字段不能重复,而且只要求增加时不增加重复的就行,那么以下两种方法
    1. 按Name字段搜索,如果Count(*)<0,则不执行insert操作。Name字段可能设置了索引,也可能没设置
    2. Name字段设置唯一索引,然后直接
        try { insert} catch (sqlexception) {判断是不是违反唯一性索引} finally
    
    又分两种情况
    1. 表中记录一般小于100条
    2. 表中记录大于1W条或者为10W条之类     是先判断再插入 还是  用异常捕捉的 效率高?

解决方案 »

  1.   

    如果insert需要定位一次,那么方案1中,select count from ... where name='',需要索引定位,而insert时,又需要定位一次;方案2中,只需要insert时定位一次,那么应该方案2效率高啊
      

  2.   

    Count(*)<=0? 谁教的sql你都还给他了!要先判断有没有,用exists,只要存在一个就说明存在了,哪有笨得用count然后再去判断的?你身边全都是一年经验(可能号称2年半)的程序员么?exists这个用法,需要准确使用。至于你说 try { insert} catch (sqlexception) {判断是不是违反唯一性索引} ,我就搞不懂你如何判断?
      

  3.   

    实际上许多人编程时是在sql语句中写if not exists(select * from ttt where ....)
      insert ttt ......的。这是比较清晰、也符合简单高效相平衡的原则的写法。
      

  4.   

    两码子事情,
    1.业务逻辑:程序员必须实现这个业务逻辑,实现断言,并UI提示;
    2.由于并发问题,存在insert的时候违反约束的情况(不仅仅是你说的name字段)
      而这种特定的异常也是设计者能够预见的,应该在异常处理中心的过滤器拦截这个特定的异常,并UI提示,
      这些工作是架构师事先就设计好的底层支持,不该让程序员为此编写任何代码