sqlite "insert or replace" 和 "insert or ignore" 用法

Posted 竹山一叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlite "insert or replace" 和 "insert or ignore" 用法相关的知识,希望对你有一定的参考价值。

insert or replace:如果不存在就插入,存在就更新
insert or ignore:如果不存在就插入,存在就忽略
只对UNIQUE约束的字段起作用。

举例:
建表:
CREATE TABLE TEST(id BIGINT, name text, birthday datetime, PRIMARY KEY(id, name));
或者CREATE TABLE TEST (id BIGINT, name text, birthday datetime, UNIQUE(id, name));
插入记录
insert into test values (10,‘aa‘,‘2010-01-01 01:01:01‘);
insert into test values (11,‘bb‘,‘2011-01-01 01:01:01‘);
insert into test values (12,‘cc‘,‘2012-01-01 01:01:01‘);


依次执行以下语句看结果:
1、insert or replace into test values (10,‘jj‘,‘2016-01-01 01:01:01‘);//不存在,插入
id          name        birthday           
----------  ----------  -------------------
10          aa          2010-01-01 01:01:01
11          bb          2011-01-01 01:01:01
12          cc          2012-01-01 01:01:01
10          jj          2016-01-01 01:01:01



2、insert or replace into test values (11,‘bb‘,‘2016-01-01 01:01:01‘);//存在,更新
id          name        birthday           
----------  ----------  -------------------
10          aa          2010-01-01 01:01:01
12          cc          2012-01-01 01:01:01
10          jj          2016-01-01 01:01:01
11          bb          2016-01-01 01:01:01


3、insert or ignore into test values (12,‘xx‘,‘2017-01-01 01:01:01‘);//不存在,插入
id          name        birthday           
----------  ----------  -------------------
10          aa          2010-01-01 01:01:01
12          cc          2012-01-01 01:01:01
10          jj          2016-01-01 01:01:01
11          bb          2016-01-01 01:01:01
12            xx            2017-01-01 01:01:01


4、insert or ignore into test values (12,‘xx‘,‘2018-01-01 01:01:01‘);//存在,忽略
id          name        birthday           
----------  ----------  -------------------
10          aa          2010-01-01 01:01:01
12          cc          2012-01-01 01:01:01
10          jj          2016-01-01 01:01:01
11          bb          2016-01-01 01:01:01
12          xx          2017-01-01 01:01:01



























































以上是关于sqlite "insert or replace" 和 "insert or ignore" 用法的主要内容,如果未能解决你的问题,请参考以下文章

BOA+PHP+SQLite之SQLite

Android--SQLite应用

玩转SQLite系列初识SQLite,重拾sql语句

sqlite3.OperationalError ...我的sqlite语法有啥问题?

玩转SQLite系列SQLite数据库应用案例实现历史搜索记录

sqlite只有几条数据内存很大