Sqlite的2個問題

2021-06-17 23:23:51 字數 744 閱讀 8457

1.主鍵自增長問題

如果row_id是表主鍵,如果ddl中設定了auto increment,insert row_id的時候只要設定為null則可以讓主鍵從1開始自增長。

但是如果這時候刪除以往的記錄後,問題出現了,新增的記錄主鍵值並不是從1開始的,而是從最後一條被刪除的主鍵值+1開始的,比如上次刪除的記錄主鍵是1200,新增一條是1201而不是1,解決辦法是drop table再重新建立

2.乙個業務場景,一張表a更新另外一張表b,a與b主鍵相同的記錄則用a的對b進行更新,a的主鍵在b不存在時則向b插入a的這條記錄

在db2中可以用update.select和exsits組合的方法解決,但是在sqlite中不能用。

這個問題找了很久,網上一些答案並不能滿足我的需求,都是用insert or replace into ....values(...,...)這種寫死值的方法,而且還有說要用unique index的,基本上互相抄襲,抱怨一下,自己不動腦子沒試過不要複製貼上再放到網上坑人

解決方法:

insert or replace into b (row_id,code,name) select row_id,code,name from a

要注意的:

1.主鍵要是integer型別的,不然報 constraint violation錯

2.into後面和select後的欄位名最好寫全,不然在被更新的那張表b中,有值但是select中沒寫的字段會被覆蓋為null

乙個sqlite應用詭異的問題

今天從應用層面解決了乙個詭異的問題。某程式,在伺服器a上跑速度很快,幾乎能將cpu乙個核的資源佔滿。而在伺服器b上跑很慢,慢了將近10倍 而且cpu使用率很低。伺服器a和b都是同樣的系統,幾乎相同型號的伺服器。通過各種排查原因,未果。最後還是認為是程式的問題。最終問題發生原因鎖定在乙個sqlite庫...

sqlite 的基本使用2

sqlite的運算子有好幾種,算術運算子,比較運算子,邏輯運算子,位運算子 1,算術運算子 算術運算子主要有 取餘 這個很簡單,舉乙個例子就行,要達到這樣的效果需要格式化行輸出 mode line sqlite select20 3 20 3 2sqlite 2,比較運算子 比較運算子,只要學習過語...

SQLite編譯問題

從主頁上獲得了sqlite的原始檔,還沒有時間研究就在編譯上發生了不小的問題。首先是碰到是,編譯之後,只產生了sqlite3.dll檔案,不產生對應的lib庫檔案。檢視了下sqlite3.h 發現了sqlite api的巨集沒有定義匯出用的 declspec dllexport 只是做了乙個空定義,...