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约束: 唯一约束,防止在一个特定的列存在两个记录具有相同的值

UNIQUEPRIMARY KEY约束有什么异同点?

  • 相同点
    PRIMARY KEY也是UNIQUE,即不可重复

  • 不同点

  1. 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, '北京')

结果

IDNAMEAGEADDRESSSALARY
1Rose18北京50000

在Rose已经存在的情况下进行update

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

结果

IDNAMEAGEADDRESSSALARY
1Rose19上海50000

如上,IDNAME都是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

结果

IDNAMEAGEADDRESSSALARY
1Rose19NULL50000
    原文作者:sea_biscute
    原文地址: https://www.jianshu.com/p/bfa617a0b9b1
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞