SQLite INSERT OR REPLACE使用

作者: sea_biscute | 来源:发表于2016-11-19 19:30 被阅读2931次

    在具体业务中,会遇到需要批量插入和修改数据库的情况.我们需要实现的是:

    • 该条数据不存在,进行插入操作
    • 该条数据存在,进行更新操作

    使用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, '北京')
    

    结果

    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

    如上,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

    结果

    ID NAME AGE ADDRESS SALARY
    1 Rose 19 NULL 50000

    相关文章

      网友评论

        本文标题:SQLite INSERT OR REPLACE使用

        本文链接:https://www.haomeiwen.com/subject/yyrepttx.html