SQLite是一個C語言庫,它實現了一個 小型, 快速, 自包含, 高可靠性, 功能齊全的 SQL資料庫引擎。SQLite是世界上使用最多的資料庫引擎。它內建於所有行動電話和大多數計算機中,並且捆綁在人們每天使用的無數其他應用程式中。下面是介紹如何使用INSERT OR REPLACE
命令。
業務需求
具體業務中,遇到需要批量插入和修改資料庫的情況。
- 當前資料不存在,進行資料插入操作
- 當前資料存在,進行資料更新操作
以上的業務情況,可以使用SQlite的 INSERT OR REPLACE
命令進行操作,具體的語法:
INSERT OR REPLACE INTO table-name (column-name,...) VALUES (column-value,...)
複製程式碼
UNIQUE 約束 或 PRIMARY KEY約束
UNIQUE約束: 唯一約束,防止在一個特定的列存在兩個記錄具有相同的值
PRIMARY KEY約束: 約束唯一標識資料庫表中的每條記錄。
相同點
PRIMARY KEY也是UNIQUE,即不可重複
不同點
- 1.PRIMARY KEY是非空的,但是UNIQUE可以為空
- 2.只能有一個主鍵,但是唯一索引可以有多個
- 3.如果沒有指定聚合索引,那麼主鍵預設為聚合索引,唯一索引不具備該特性
INSERT OR REPLACE INTO table-name (column-name,...) VALUES (column-value,...)
複製程式碼
在如上的colunm-name
中,如果已插入的column-value
均無已存在的值,則判斷插入的該條資料不存在,反正存在.
建立表:
CREATE TABLE TARD ( ID INT PRIMARY KEY, name TEXT NOT NULL UNIQUE, age INT NOT NULL , date CHAR(50),Dvalue REAL DEFAULT 300.00);
複製程式碼
// 在xiaoming不存在的情況下進行INSERT
INSERT OR REPLACE INTO TARD (ID, name, age, date) VALUES (1, 'xiaoming', 18, '打電話')
// 結果
ID name age date Dvalue
1 xiaoming 18 打電話 300
// 在xiaoming已經存在的情況下進行update
INSERT OR REPLACE INTO TARD (ID, name, age, date) VALUES (1, 'xiaoming', 118, '去打電話')
// 結果
ID name age date Dvalue
1 xiaoming 118 去打電話 300
複製程式碼
建立表的時候ID
和name
都是UNIQUE
的,命令只有在兩個值都不存在時,才會進行插入,否則更新當前資料
注意
如果INSERT OR REPLACE INTO table-name (column-name,...) VALUES (column-value,...)
該資料已存在,在更新時,某行資料沒填寫,則預設為空,覆蓋之前的資料.
舉例:
INSERT OR REPLACE INTO TARD (ID, name, age, date) VALUES (1, 'xiaoming', 118)
複製程式碼
xiaoming已在資料庫中,會進行更新操作,沒有填寫date
數值,則date
數值不會被保留,而且替換為NULL
ID name age date Dvalue
1 xiaoming 118 NULL 300
複製程式碼
完。