在Sqlite中通過Replace來實現插入和更新
你可能在批量處理一個事務的時候,想要批量插入一系列的資料,但是這些資料當新增完一次之後,重新新增的時候,你不想要重新新增,只是想將原有的資料進行更新,例如:我想要通過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語句:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
REPLACE INTO tbl_book
(
Name ,
Author
, PublishDate
, pagecount
, Memo
)
VALUES (
'WF高階程式設計' ,
'Bruce
Bukovics' ,
date (
) , 454
, 'Test' )
; |
第一次執行時,由於表中沒有資料,所以命令轉換為Insert;
當第二次執行時,由於表中已經存在相同的“Name”和“Author”的資料,於是不進行插入,而命令將轉換為Update。
因此,當你執行以下語句時:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
REPLACE INTO tbl_book
(
Name ,
Author
, PublishDate
, pagecount
, Memo
)
VALUES (
'WF高階程式設計' ,
'Bruce
Bukovics' ,
date (
) , 500
, --
頁碼總數改變 'Test2' --
備註改變 )
; |
執行結果:
頁碼和備註都改變了,說明這裡執行了Update。
然後我修改Name名稱:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
REPLACE INTO tbl_book
(
Name ,
Author
, PublishDate
, pagecount
, Memo
)
VALUES (
'WPF揭祕' ,
--
書名改變 'Bruce
Bukovics' ,
date (
) , 500
, 'Test2' )
; |
執行結果:
插入了一條圖書的記錄,同樣你也可以嘗試改變Author,同樣也是插入記錄。
這樣,您就可以通過在表中建立唯一索引並且利用Replace達到Insert OR Update的目的。
相關文章
- Java通過Mybatis實現批量插入資料到Oracle中JavaMyBatisOracle
- Spring中通過Annotation來實現AOPSpring
- SQLite INSERT OR REPLACE使用SQLite
- Spring Data JPA中實現更新插入三種方法Spring
- 在WPS演示中快速實現Flash插入
- SQLite 之 INSERT OR REPLACE使用SQLite
- PHP配上MySQL實現批量更新插入PHPMySql
- 通過append hint來插入資料,演示它和普通插入資料的效能比較。APP
- 通過PureRender和Immutable實現React中的效能優化React優化
- Java的通過管道來實現執行緒通訊Java執行緒
- SQLite中中實現 if not exist 類似功能SQLite
- [Sqlite] Sqlite在Windows、Linux 和 Mac OS X 上的安裝過程SQLiteWindowsLinuxMac
- sqlite更新SQLite
- The Chinese Room的過去、現在和未來OOM
- 通過佇列實現棧OR通過棧實現佇列佇列
- Swoole 中通過 process 模組實現多程式
- ReactState(狀態):React通過this.state來訪問state,通過this.setState()方法來更新stateReact
- 通過Comparable來實現對自身的比較
- 通過配置環境來實現PHP高效優化PHP優化
- 在Spring Boot中實現WebSocket實時通訊Spring BootWeb
- Dun:資料的過去、現在和未來
- pycharm中安裝和使用sqlite過程詳解PyCharmSQLite
- 原生js實現replace方法JS
- 通過shell來比較oracle和java中的字串使用OracleJava字串
- ASP.NET Web API通過ActionFilter來實現快取ASP.NETWebAPIFilter快取
- Sql Server2008如何在儲存過程中實現根據判斷插入更新資料SQLServer儲存過程
- 通過模板實現POI
- 通過Go來分析和建立XMLGoXML
- 在 Python 中實現函式過載Python函式
- 在Java中實現回撥過程 (轉)Java
- 饒軍:Apache Kafka的過去,現在,和未來ApacheKafka
- 在CGI中實現session的想法和實現 (轉)Session
- Flutter 中通過 Container 實現時間軸效果FlutterAI
- Linux 通過lseek()來實現檔案大小的設定Linux
- 如何基於Django中的WebSockets和非同步檢視來實現實時通訊功能DjangoWeb非同步
- 論 MySql InnoDB 如何通過插入意向鎖控制併發插入MySql
- 教你Mysql如何實現不存在則插入,存在則更新MySql
- LRU 實現 通過 LinkedHashMapHashMap