sqlite避免重複插入數據


用insert語句插入數據,爲避免重複插入又不打斷數據處理。
首先要避免重複插入,就必須在插入時引發衝突。在表中設置了id字段,該字段爲UNIQUE屬性,當插入的id已存在時引發衝突。
引發衝突後insert會做一些處理,處理方式由OR字句定義。包含如下:
ROLLBACK當發生約束衝突,立即ROLLBACK,即結束當前事務處理,命令中止並返回SQLITE_CONSTRAINT代碼。若當前無活動事務(除了每一條命令創建的默認事務以外),則該算法與ABORT相同。
ABORT當發生約束衝突,命令收回已經引起的改變並中止返回SQLITE_CONSTRAINT。但由於不執行ROLLBACK,所以前面的命令產生的改變將予以保留。缺省採用這一行爲。
FAIL當發生約束衝突,命令中止返回SQLITE_CONSTRAINT。但遇到衝突之前的所有改變將被保留。例如,若一條UPDATE語句在100行遇到衝突100th,前99行的改變將被保留,而對100行或以後的改變將不會發生。
IGNORE當發生約束衝突,發生衝突的行將不會被插入或改變。但命令將照常執行。在衝突行之前或之後的行將被正常的插入和改變,且不返回錯誤信息。
REPLACE當發生UNIQUE約束衝突,先存在的,導致衝突的行在更改或插入發生衝突的行之前被刪除。這樣,更改和插入總是被執行。命令照常執行且不返回錯誤信息。當發生NOT NULL約束衝突,導致衝突的NULL值會被字段缺省值取代。若字段無缺省值,執行ABORT算法


爲避免操作打斷,我選擇了IGNORE。最後完整的用法如下:
INSERT OR IGNORE INTO troopstypes (id)values(2);    當然這裏你要將你設置的列字段用unique 進行約束的!
發佈了37 篇原創文章 · 獲贊 2 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章