SQLite INSERT OR REPLACE使用

在具體業(yè)務(wù)中,會遇到需要批量插入和修改數(shù)據(jù)庫的情況.我們需要實現(xiàn)的是:

  • 該條數(shù)據(jù)不存在,進(jìn)行插入操作
  • 該條數(shù)據(jù)存在,進(jìn)行更新操作

使用INSERT OR REPLACE命令即可滿足需求,語句規(guī)范INSERT OR REPLACE INTO table-name (column-name,...) VALUES (column-value,...).

創(chuàng)建UNIQUE約束

需求為如果NAME已經(jīng)存在,則更新,不存在則插入,創(chuàng)建表方式如下:

CREATE TABLE COMPANY
( ID INT PRIMARY KEY,
 NAME TEXT NOT NULL UNIQUE, 
AGE INT NOT NULL , 
ADDRESS CHAR(50), 
SALARY REAL DEFAULT 50000.00);

如上,我們對 NAME使用了UNIQUE約束.什么是UNIQUE約束?
UNIQUE約束: 唯一約束,防止在一個特定的列存在兩個記錄具有相同的值

UNIQUEPRIMARY KEY約束有什么異同點?

  • 相同點
    PRIMARY KEY也是UNIQUE,即不可重復(fù)

  • 不同點

  1. PRIMARY KEY是非空的,但是UNIQUE可以為空
    2.只能有一個主鍵,但是唯一索引可以有多個
    3.如果沒有指定聚合索引,那么主鍵默認(rèn)為聚合索引,唯一索引不具備該特性

如上判斷條件,數(shù)據(jù)不存在時進(jìn)行插入,存在時更新,INSERT OR REPLACE是如何判斷存在條件的呢?
INSERT OR REPLACE INTO table-name (column-name,...) VALUES (column-value,...)
在如上的colunm-name中,如果已插入的column-value均無已存在的值,則判斷插入的該條數(shù)據(jù)不存在,反正存在.
舉例:
表為空時,如果執(zhí)行

INSERT OR REPLACE INTO COMPANY
(ID, NAME, AGE,ADDRESS)
VALUES
(1, 'Rose', 18, '北京')

結(jié)果

ID NAME AGE ADDRESS SALARY
1 Rose 18 北京 50000

在Rose已經(jīng)存在的情況下進(jìn)行update

INSERT OR REPLACE INTO COMPANY
(ID, NAME, AGE,ADDRESS)
VALUES
(1, 'Rose', 19, '上海')

結(jié)果

ID NAME AGE ADDRESS SALARY
1 Rose 19 上海 50000

如上,IDNAME都是UNIQUE的,所以命令只有在兩個值都不存在時,才會進(jìn)行插入,否則更新當(dāng)前數(shù)據(jù)

注意

如果INSERT OR REPLACE INTO table-name (column-name,...) VALUES (column-value,...)該數(shù)據(jù)已存在,在更新時,如果某行數(shù)據(jù)沒填寫,則默認(rèn)為空,覆蓋之前的數(shù)據(jù).
舉例:

INSERT OR REPLACE INTO COMPANY
(ID, NAME, AGE)
VALUES
(1, 'Rose', 19,)

Rose已在數(shù)據(jù)庫中,會進(jìn)行更新操作,沒有填寫ADDRESS欄,則過去的ADDRESS數(shù)值不會被保留,而且替換為NULL

結(jié)果

ID NAME AGE ADDRESS SALARY
1 Rose 19 NULL 50000
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容