標籤:
想要插入一條資料,要避免重複插入,又不想折騰兩回資料庫連接操作,可以參考如下辦法。
Sql代碼
- 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的冗繁操作.
例:
Sql代碼
- INSERT INTO content (
- detail,
- status,
- beginTime,
- endTime)
- SELECT
- @detail,
- 1,
- NULL,
- NULL
- FROM DUAL
- WHERE NOT EXISTS(
- SELECT contentId
- FROM content
- WHERE [email protected]);
@detail是要存入的內容,這裡對內容進行了檢索,如果要這麼做,最好對該欄位做唯一約束,或加索引。
省掉了IF-ELSE,在iBatis配置一下就ok了,哈!
還有個更堅決的辦法——replace into:
Sql代碼
- replace into blacklist(userInfoId,uid)
- select userInfoId,uid from user_info u where uid in(
- ‘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