程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQLite中使用約束解決插入/更新重復問題

SQLite中使用約束解決插入/更新重復問題

編輯:關於SqlServer
 

一直以來在使用SQL語句的時候都是力求簡潔,把SQL精簡到最優化以提高效率。這是做Web程序時養成的習慣。不過,最近在一個c#程序中使用到嵌入式數據庫SQLite,讓我對SQL語句的要求更提高了一步。例如,在向數據庫中插入新行時,如果違背了某一唯一性約束。那麼整個更新過程就會失敗。更要命的是如果同時插入1000條、10000條甚至更多條數據的時候,如果僅僅因為某條數據出錯,導致整個過程rollback了,似乎在性能上就得不償失了。

起初我想了一個比較笨的辦法,聰明的你可能已經想到了^_^,先用select語句查詢是否存在重復,剔除到重復後在插入新數據。對於大批量數據的插入/更新,這的的確確是個笨辦法。

後來想到用觸發器做這個,效果不錯,但為這麼個簡單的問題就動用觸發器似乎也不合理喔。最後在查詢手冊的過程發現了一條語句可以很好地解決重復問題。

ON CONFLICT conflict-algorithm

conflict-algorithm ::= ROLLBACK | ABORT | FAIL | IGNORE | REPLACE

這個是用在新建數據表的時候,如果是在插入或更新語句中使用就可以使用 OR 代替 ON Conflict。

例如: insert or ignore into table (fields) values (values);

或者干脆使用 replace into table (fields) values (values);

replace = insert or replace

很好地解決了更新/插入重復的問題^_^

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved