在Sqlite中通过Replace来实现插入和更新
你可能在批量处理一个事务的时候,想要批量插入一系列的数据,但是这些数据当添加完一次之后,重新添加的时候,你不想要重新添加,只是想将原有的数据进行更新,例如:我想要通过Excel将一系列的图书导入到数据库中,而这些图书在你下一次编辑之后,重新导入,只是对原有的数据进行修改。以上是一个业务的场景。
在MSSQL中,你可以使用诸如:
IF NOT EXISTS(SELECT * FROM Book WHERE ….) THEN INSERT INTO ... ELSE UPDATE SET ... |
这样的SQL语法表示。而在SQLite中,不支持这样的语法。
而对应的,在Sqlite中可以使用 Replace Into 或者 Insert Or Replace Into 这样的语法格式。
现在,我使用SQLite Developer的Sqlite客户端数据库管理工具,来创建数据表,对应字段如下:

然后,标签切换到“索引”栏:

这里我将Name(书名)和Author(作者)创建索引,并且规定为唯一索引。保存数据表。
这样就意味着只要Name和Author对应是相同的,Replace into 对应的就变成 Update,如果不完成相同,就对应变成 Insert 语句。
于是我在“查询数据”中,执行SQL语句:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
REPLACE INTO tbl_book ( Name , Author , PublishDate , pagecount , Memo ) VALUES ( 'WF高级程序设计' , 'Bruce Bukovics' , date( ) , 454 , 'Test' ) ; |
第一次执行时,由于表中没有数据,所以命令转换为Insert;

当第二次执行时,由于表中已经存在相同的“Name”和“Author”的数据,于是不进行插入,而命令将转换为Update。
因此,当你执行以下语句时:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
REPLACE INTO tbl_book ( Name , Author , PublishDate , pagecount , Memo ) VALUES ( 'WF高级程序设计' , 'Bruce Bukovics' , date( ) , 500 , -- 页码总数改变 'Test2' -- 备注改变 ) ; |
执行结果:

页码和备注都改变了,说明这里执行了Update。
然后我修改Name名称:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
REPLACE INTO tbl_book ( Name , Author , PublishDate , pagecount , Memo ) VALUES ( 'WPF揭秘' , -- 书名改变 'Bruce Bukovics' , date( ) , 500 , 'Test2' ) ; |
执行结果:

插入了一条图书的记录,同样你也可以尝试改变Author,同样也是插入记录。
这样,您就可以通过在表中创建唯一索引并且利用Replace达到Insert OR Update的目的。
整体还是很简单,这个是我在做嵌入式项目中的一点心得:)
(补充一下:在.NET中,插入或者更新日期字段的时候,会出现一些问题,这里你需要将传值的日期格式通过ToString(“s”),来进行插入或更新)
在Sqlite中通过Replace来实现插入和更新的更多相关文章
- sqlite中的replace、insert、update之前的区别
本文转自http://www.ithao123.cn/content-933827.html,在此感谢作者 android数据库操作,有两种方式,一种用android提供给我们的数据库操作函数inse ...
- Mybatis中实现oracle的批量插入、更新
oracle 实现在Mybatis中批量插入,下面测试可以使用,在批量插入中不能使用insert 标签,只能使用select标签进行批量插入,否则会提示错误 ### Cause: java.sql.S ...
- ON DUPLICATE KEY UPDATE重复插入时更新
mysql当插入重复时更新的方法: 第一种方法: 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (c ...
- mysql ON DUPLICATE KEY UPDATE重复插入时更新
mysql当插入重复时更新的方法: 第一种方法: 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (c ...
- SQLite中特殊的INSERT语句
SQLite中特殊的INSERT语句 在SQLite中,INSERT是基本语句,用来向表中插入数据.但是当表中存在字段存在唯一.非空.检查.主键等约束时,插入的数据很容易和约束冲突,造成插入操作失 ...
- System.Data.SQLite 中GUID的处理
原文:System.Data.SQLite 中GUID的处理 项目中正好用到System.Data.SQLite,在手持上使用这个数据库,因为要做数据同步,所以表中的主键都是Guid的数据类型. 在数 ...
- EF6 在 SQLite中使用备忘
== 菜鸟级选手试验在EF6中使用Sqlite,零EF基础,少量Sqlite基础.经过断断续续的很长时间 - _ -! >>连接 1. 安装 使用目前最新版本EF6.1,Sqlite1.0 ...
- SQL Server XML基础学习之<7>--XML modify() 方法对 XML 数据中插入、更新或删除
/*------------------------------------------------------------------------------+ #| = : = : = : = : ...
- (转)Sqlite中INTEGER PRIMARY KEY AUTOINCREMENT和rowid的使用
原文:http://www.cnblogs.com/peida/archive/2008/11/29/1343832.html Sqlite中INTEGER PRIMARY KEY AUTOINCRE ...
随机推荐
- .NET Core在类库中读取配置文件appsettings.json
在.NET Framework框架时代我们的应用配置内容一般都是写在Web.config或者App.config文件中,读取这两个配置文件只需要引用System.Configuration程序集,分别 ...
- 介绍HTTP协议的传输过程
1.HTTP是面向事物的应用层协议,它使用TCP连接进行可靠传输,服务器默认监听在80端口 2.服务流程 从协议执行过程来说,当浏览器要访问www服务器时,首先要对服务器进行域名解析(DNS协议).一 ...
- RabbitMQ在特来电的深度应用
特来电是一个互联网公司,而且是技术领先的互联网公司.互联网公司的标配是什么?答案就是缓存+MQ.没错,您没看错,就是MQ--消息队列,我们今天要讨论的RabbitMQ就是消息队列中功能非常强大的一种. ...
- 【亲测有效】Centos安装完成docker后启动docker报错docker: unrecognized service的两种解决方案
今天在学习Docker的时候 使用yum install docker安装完后启动不了,报错如下: [root@Sakura ~]# service docker start docker: unre ...
- Nginx挂载维护页或返回自定义响应信息
在服务停机升级或者服务暂不可用时,往往希望能够返回给用户更为明确和友好的响应信息.可以通过修改nginx配置文件,达到返回自定义信息的效果.有如下几种配置方式: (1)Nginx接收到的所有请求,都返 ...
- mooc linux学习总结
通过八周的学习获得了很多知识. 首先,通过网课老师形象生动的讲述和描述一些专业词汇,使我更加深刻的记住并掌握了这些内容:动态的展示堆栈的变化,更容易理解一段汇编代码:分析操作系统的工作,记 ...
- JProfiler的使用
1.下载地址:http://www.ej-technologies.com/download/jprofiler/files 2.使用过程 1.点击此图的new Session 2.点击左边appli ...
- 7-Python3从入门到实战—基础之数据类型(字典-Dictionary)
Python从入门到实战系列--目录 字典的定义 字典是另一种可变容器模型,且可存储任意类型对象:使用键-值(key-value)存储,具有极快的查找速度: 字典的每个键值(key=>value ...
- JQuery基础-- Ajax
基本格式: get: $.get("url",data,function(res){ #..... }) post: $.post("url",data ...
- 携程Apollo配置中心架构深度剖析
转自:http://www.uml.org.cn/wfw/201808153.asp 一.介绍 Apollo(阿波罗)[参考附录]是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在 ...