Sqlite的2個問題

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.