MySQL 陳述式級避免重複插入—— Insert Select Not Exist

來源:互聯網
上載者:User

標籤:

想要插入一條資料,要避免重複插入,又不想折騰兩回資料庫連接操作,可以參考如下辦法。 

Sql代碼  
  1. INSERT INTO table(column1,column2,column3 ...columnN)  
  2. SELECT value1,value2,value3 ...valueN  
  3. FROM dual  
  4. WHERE NOT EXISTS(  
  5.       SELECT *  
  6.       FROM table  
  7.       WHERE value = ?  
  8. );  


dual是為了構建查詢語句而存在的表,Oracle中很常見,配合INSERT ... SELECT構建成我們需要的表,並指定了資料項目. 
EXISTS通過這個判斷是否存在的函數,就免去了我們做IF-ELSE的冗繁操作. 

例: 

Sql代碼  
  1. INSERT INTO content (  
  2.     detail,  
  3.     status,  
  4.     beginTime,  
  5.     endTime)   
  6. SELECT  
  7.     @detail,  
  8.     1,  
  9.     NULL,  
  10.     NULL  
  11. FROM DUAL  
  12.     WHERE NOT EXISTS(  
  13.         SELECT contentId   
  14.         FROM content   
  15.         WHERE [email protected]);  


@detail是要存入的內容,這裡對內容進行了檢索,如果要這麼做,最好對該欄位做唯一約束,或加索引。 
省掉了IF-ELSE,在iBatis配置一下就ok了,哈! 

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

Sql代碼  
    1. replace into blacklist(userInfoId,uid)  
    2. select userInfoId,uid from user_info u where uid in(  
    3. ‘u303565440‘,‘u303566922‘,‘u303515112‘,‘u303559738‘);  

 

 

 

關於這個可是有個大討論的。

ACCESS的真假:二、檢查記錄有無再insert 或 update 比 不管有無直接 delete 再 insert 快嗎? 
http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/23/4210633.aspx

Access或其它資料庫操作效率問題.歡迎討論
http://topic.csdn.net/u/20090514/10/a93475bd-e67e-45c8-aa1e-87168ba36d02.html#replyachor

MySQL 陳述式級避免重複插入—— Insert Select Not Exist

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.