SQLite INSERT OR REPLACE使用
在具體業務中,會遇到需要批量插入和修改資料庫的情況.我們需要實現的是:
- 該條資料不存在,進行插入操作
- 該條資料存在,進行更新操作
使用INSERT OR REPLACE
命令即可滿足需求,語句規範INSERT OR REPLACE INTO table-name (column-name,...) VALUES (column-value,...)
.
建立UNIQUE
約束
需求為如果NAME
已經存在,則更新,不存在則插入,建立表方式如下:
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
約束: 唯一約束,防止在一個特定的列存在兩個記錄具有相同的值
UNIQUE
和 PRIMARY KEY
約束有什麼異同點?
相同點
PRIMARY KEY
也是UNIQUE
,即不可重複不同點
-
PRIMARY KEY
是非空的,但是UNIQUE
可以為空
2.只能有一個主鍵,但是唯一索引可以有多個
3.如果沒有指定聚合索引,那麼主鍵預設為聚合索引,唯一索引不具備該特性
如上判斷條件,資料不存在時進行插入,存在時更新,INSERT OR REPLACE
是如何判斷存在條件的呢?INSERT OR REPLACE INTO table-name (column-name,...) VALUES (column-value,...)
在如上的colunm-name
中,如果已插入的column-value
均無已存在的值,則判斷插入的該條資料不存在,反正存在.
舉例:
表為空時,如果執行
INSERT OR REPLACE INTO COMPANY
(ID, NAME, AGE,ADDRESS)
VALUES
(1, 'Rose', 18, '北京')
結果
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Rose | 18 | 北京 | 50000 |
在Rose已經存在的情況下進行update
INSERT OR REPLACE INTO COMPANY
(ID, NAME, AGE,ADDRESS)
VALUES
(1, 'Rose', 19, '上海')
結果
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Rose | 19 | 上海 | 50000 |
如上,ID
和NAME
都是UNIQUE的,所以命令只有在兩個值都不存在時,才會進行插入,否則更新當前資料
注意
如果INSERT OR REPLACE INTO table-name (column-name,...) VALUES (column-value,...)
該資料已存在,在更新時,如果某行資料沒填寫,則預設為空,覆蓋之前的資料.
舉例:
INSERT OR REPLACE INTO COMPANY
(ID, NAME, AGE)
VALUES
(1, 'Rose', 19,)
Rose已在資料庫中,會進行更新操作,沒有填寫ADDRESS
欄,則過去的ADDRESS
數值不會被保留,而且替換為NULL
結果
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Rose | 19 | NULL | 50000 |
相關文章
- SQLite 之 INSERT OR REPLACE使用SQLite
- 教你使用SQLite-insert語句SQLite
- SQLite Insert 語句SQLite
- REPLACE與INSERT INTO ... ON DUPLICATE KEY總結
- SQLite中特殊的INSERT語句SQLite
- MySQL中REPLACE INTO和INSERT INTO的區別分析MySql
- SQLite語句(二):INSERT DELETE UPDATE SELECTSQLitedelete
- 在Sqlite中通過Replace來實現插入和更新SQLite
- 【SQLite】SQLite的簡單使用SQLite
- ReplaceableModel:為 Eloquent 模型新增 REPLACE 和 INSERT IGNORE 查詢功能模型
- 字串replace方法的使用字串
- MySQL replace into的使用細則MySql
- sql CHARINDEX,REPLACE函式使用SQLIndex函式
- 教你使用SQLite VacuumSQLite
- SQLite使用入門SQLite
- SQLite使用心得SQLite
- Sqlite使用說明SQLite
- oracle中translate與replace的使用Oracle
- 11 replace-method標籤使用
- android SQLite的使用AndroidSQLite
- Replace
- SQLite 命令列客戶端 sqlite3 使用指南SQLite命令列客戶端
- 使用sqlite3 模組操作sqlite3資料庫SQLite資料庫
- ubuntu上使用sqlite3UbuntuSQLite
- SQLite 基本命令使用方式SQLite
- 教你使用SQLite 子查詢SQLite
- GRDB使用SQLite的WAL模式SQLite模式
- SQLite3 使用教學SQLite
- SQLITE3 使用總結SQLite
- [轉帖]SQLite使用教學SQLite
- JavaScript replace()JavaScript
- mysql replaceMySql
- SQL中的替換函式replace()使用SQL函式
- 使用rownum及replace實現行轉列
- 【SQLite】SQLite簡介SQLite
- 使用JDBC時,加速批量insertJDBC
- bulk insert 在mssql中使用SQL
- Swift之SQLite的基礎使用SwiftSQLite