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是要存入的內容,這里對內容進行了檢索,如果要這么做,最好對該字段做唯一約束,或加索引。 
省掉了IF-ELSE,在iBatis配置一下就ok了,哈! 

還有個更堅決的辦法——replace into: 

replace INTO  `taisau`.`RecordInfo`(`WorkID`,`bArtificialAttendance`,`fThreshold`,`Attendance_Time`,`PicPath`)\
                                             select '%s','1','60.00','%d-%02d-%02d %02d:%02d:%02d.000','%s'  from dual where not exists (SELECT `Attendance_Time` FROM  `taisau`.`RecordInfo` WHERE `WorkID` = '%s'  AND `Attendance_Time` = '%d-%02d-%02d %02d:%02d:%02d.000');

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM