SQLite 之 INSERT OR REPLACE使用

Drl龍發表於2019-01-22

SQLite是一個C語言庫,它實現了一個 小型, 快速, 自包含, 高可靠性, 功能齊全的 SQL資料庫引擎。SQLite是世界上使用最多的資料庫引擎。它內建於所有行動電話和大多數計算機中,並且捆綁在人們每天使用的無數其他應用程式中。下面是介紹如何使用INSERT OR REPLACE命令。

原文連結

個人部落格-歡迎訪問

SQLite

業務需求

具體業務中,遇到需要批量插入和修改資料庫的情況。

  • 當前資料不存在,進行資料插入操作
  • 當前資料存在,進行資料更新操作

以上的業務情況,可以使用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


複製程式碼

建立表的時候IDname都是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

複製程式碼

完。

相關文章