MySQL 语句级避免重复插入—— Insert Select Not Exist

想要插入一条数据,要避免重复插入,又不想折腾两回数据库连接操作,可以参考如下办法。

    INSERT INTO table(column1,column2,column3 ...columnN)  
    SELECT value1,value2,value3 ...valueN  
    FROM dual  
    WHERE NOT EXISTS(  
          SELECT *  
          FROM table  
          WHERE value = ?  
    );  

dual是为了构建查询语句而存在的表,Oracle中很常见,配合INSERT … SELECT构建成我们需要的表,并指定了数据项.
EXISTS通过这个判断是否存在的函数,就免去了我们做IF-ELSE的冗繁操作

    INSERT INTO content (  
        detail,  
        status,  
        beginTime,  
        endTime)   
    SELECT  
        @detail,  
        1,  
        NULL,  
        NULL  
    FROM DUAL  
        WHERE NOT EXISTS(  
            SELECT contentId   
            FROM content   
            WHERE detail=@detail);  

@detail是要存入的内容,这里对内容进行了检索,如果要这么做,最好对该字段做唯一约束,或加索引。

此条目发表在学习笔记分类目录,贴了, 标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注