在Sqlite中通過Replace來實現插入和更新

來源:互聯網
上載者:User

      你可能在批量處理一個事務的時候,想要批量插入一系列的資料,但是這些資料當添加完一次之後,重新添加的時候,你不想要重新添加,只是想將原有的資料進行更新,例如:我想要通過Excel將一系列的圖書匯入到資料庫中,而這些圖書在你下一次編輯之後,重新匯入,只是對原有的資料進行修改。以上是一個業務的情境。

在MSSQL中,你可以使用諸如:

IF NOT EXISTS(SELECT * FROM Book WHERE ….) THEN INSERT INTO ... ELSE UPDATE SET ...

這樣的SQL文法表示。而在SQLite中,不支援這樣的文法。

而對應的,在Sqlite中可以使用 Replace Into 或者 Insert Or Replace Into 這樣的文法格式。

 

現在,我使用SQLite Developer的Sqlite用戶端資料庫管理工具,來建立資料表,對應欄位如下:

 

然後,標籤切換到“索引”欄:

這裡我將Name(書名)和Author(作者)建立索引,並且規定為唯一索引。儲存資料表。

這樣就意味著只要Name和Author對應是相同的,Replace into 對應的就變成 Update,如果不完成相同,就對應變成 Insert 語句。

 

於是我在“查詢資料”中,執行SQL語句:

REPLACE INTO tbl_book   (     Name ,     Author ,     PublishDate ,     pagecount ,     Memo   ) VALUES   (     'WF進階程式設計' ,     'Bruce Bukovics' ,     date( ) ,     454 ,     'Test'   ) ;

第一次執行時,由於表中沒有資料,所以命令轉換為Insert;

當第二次執行時,由於表中已經存在相同的“Name”和“Author”的資料,於是不進行插入,而命令將轉換為Update。

因此,當你執行以下語句時:

REPLACE INTO tbl_book   (     Name ,     Author ,     PublishDate ,     pagecount ,     Memo   ) VALUES   (     'WF進階程式設計' ,     'Bruce Bukovics' ,     date( ) ,     500 ,   -- 頁碼總數改變     'Test2' -- 備忘改變  ) ;

執行結果:

頁碼和備忘都改變了,說明這裡執行了Update。

 

然後我修改Name名稱:

REPLACE INTO tbl_book   (     Name ,     Author ,     PublishDate ,     pagecount ,     Memo   ) VALUES   (     'WPF揭秘' ,     -- 書名改變    'Bruce Bukovics' ,     date( ) ,     500 ,        'Test2'   ) ;

執行結果:

插入了一條圖書的記錄,同樣你也可以嘗試改變Author,同樣也是插入記錄。

 

這樣,您就可以通過在表中建立唯一索引並且利用Replace達到Insert OR Update的目的。

 

整體還是很簡單,這個是我在做嵌入式項目中的一點心得:)

(補充一下:在.NET中,插入或者更新日期欄位的時候,會出現一些問題,這裡你需要將傳值的日期格式通過ToString(“s”),來進行插入或更新)

相關文章

聯繫我們

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