在Sqlite中通过Replace来实现插入和更新

news2024/11/18 19:34:17

你可能在批量处理一个事务的时候,想要批量插入一系列的数据,但是这些数据当添加完一次之后,重新添加的时候,你不想要重新添加,只是想将原有的数据进行更新,例如:我想要通过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客户端数据库管理工具,来创建数据表,对应字段如下:

image

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

image

这里我将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;

image

当第二次执行时,由于表中已经存在相同的“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' -- 备注改变

  ) ;

执行结果:

image

页码和备注都改变了,说明这里执行了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'

  ) ;

执行结果:

image

插入了一条图书的记录,同样你也可以尝试改变Author,同样也是插入记录。

这样,您就可以通过在表中创建唯一索引并且利用Replace达到Insert OR Update的目的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1313805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

群晖上搭建短链接服务Yourls

什么 Yourls ? YOURLS是一组 PHP 脚本,允许您在服务器上运行您自己的 URL 缩短器。您将完全控制您的数据、详细统计数据、分析、插件等。它是免费且开源的。 安装 建数据库 老苏用了群晖自带的 MariaDB 10 数据库 在 phpMyAdmin 中创建名为 yourls 的空数据库 为…

Vue 子传父 组件传参 defineEmits

defineEmits 属性:用于创建自定义事件,接收子组件传递过来的数据。 注意:如果自定义事件的名称,和原生事件的名称一样,那么只会触发自定义事件。 defineEmits 仅适用于 setup 语法糖,其它写法请见&#x…

Qt容器QMdiArea 小部件提供一个显示 MDI 窗口的区域

## QMdiArea ## 控件简介 QMdiArea 继承 QAbstractScrollArea。QMdiArea 小部件提供一个显示 MDI 窗口的区域。QMdiArea的功能本质上类似于MDI窗口的窗口管理器。大多数复杂的程序,都使用MDI框架,在 Qt designer 中可以直接将控件 MDI Area 拖入使用。 ## 用法示例 例 qm…

注意std::shared_ptr的循环引用

指针智能是RAII的思想的具体体现。利用对象生命周期来管理资源。 在C11中,引入shared_ptr、weak_ptr和unique_ptr。 share_ptr是一个能有效解决赋值和拷贝构造的引用技术。 std::shared_ptr通过引用计数的方式来管理对象的生命周期,但是如果两个对象互…

『番外篇三』Swift “乱弹”之带索引遍历异步序列(AsyncSequence)

概览 在 Swift 开发中,我们往往在遍历集合元素的同时希望获得元素对应的索引。在本课中,我们将向小伙伴们展示除 enumerated() 方法之外的几种实现思路。在玩转普通集合之后,我们将用“魔法棒”进一步搞定异步序列带索引遍历的实现。 在本篇博主中,您将学到以下内容: 概…

同时获取el-select的label和value

ui如下: 需求如下: 在点击确认的时候,将id和name都传给一个接口,但是ui只用展示name,name用v-model绑定给input框,但是id不知道怎么传给后端。 解决方法如下: vue中elementUi的el-select同时…

jmeter,csv文件参数化+断言 实现一个接口的case

1、case 及其 测试数据 注意保存文件的编码格式 id,name,limit,status,address,start_time,assert_status,assert_message 100,小米100,1000,1,某某会展中心101,2023-8-20 14:20,200,add event success ,,,,,,10021,parameter error 100,小米102,1002,1,某某会展中心103,2023-…

postman接口测试之Postman配置环境变量和全局变量

前言  我们在测试的过程中,遇到最多的问题也可以是环境的问题了吧,今天开发用了这个测试环境,明天又换了另一个测试环境,这样对于我们测试非常的麻烦,特别最接口的时候需要来回的输入环境地址比较麻烦,今天…

LVS负载均衡集群——NAT地址转换模式与DR直接路由模式

1. LVS集群基本介绍 Cluster,集群、群集。 由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机。 2. 集群的类型 2.1 负载均衡群集(Load Balanc…

安路IP核应用举例(OSC、UART)

1.OSC(内部振荡器) 按照Project->New Project顺序新建工程后,后按照Tools->IP Generator顺序,创建IP核,如下图: 安路FPGA的内置OSC振荡模块频率可选30MHz、60MHz。 可选Verilog或VHDL语言。 如图,生成的.v文件只…

外包干了4个月,测试技术退步明显

先说一下自己的情况,本科生,20年通过校招进入杭州某软件公司,干了3年的功能测试,当然有半年是被封在了家里,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我…

灾备建设中,虚拟机异构平台恢复技术原理与应用

在如今混合云环境下,实现异构虚拟化恢复与迁移面临着极大挑战。不同于市面上有代理的恢复方案,虚拟机无代理跨平台恢复解决方案利用自主研发的转换引擎(VMCE)对已备份虚拟机文件进行高效的存储格式转换和配置信息转换,…

Deep Graph Contrastive Representation Learning

摘要 如今,图表示学习已成为分析图结构数据的基础。受最近成功的对比方法的启发,在本文中,我们提出了一种新的无监督图表示学习框架,该框架利用节点级别的对比目标。具体来说,我们通过破坏生成两个图视图,…

Jmeter接口自动化测试操作流程(超详细整理)

在企业使用jmeter开展实际的接口自动化测试工具,建议按如下操作流程, 可以使整个接口测试过程更规范,更有效。 接口自动化的流程: 1、获取到接口文档:swagger、word、excel ... 2、熟悉接口文档然后设计测试用例&am…

基于人工智能算法与视频监控相结合的EasyCVR智能游乐园监控方案

随着圣诞节的到来,人们都已经在规划如何安排平安夜活动,游乐园俨然成为了人们的首选。游乐园人员流量大且密集,特别是在节假日和重大节日,人满为患,极易发生事故,为保证游乐场安全运营,减少事故…

JVM虚拟机系统性学习-JVM调优之GC日志分析

JVM 调优 首先,为什么要 JVM 调优呢? JVM 调优的目的就是为了让应用程序使用最小的硬件消耗来承载更大的吞吐量 什么情况下需要 JVM 调优呢? 系统吞吐量下降,或系统延迟较高出现 OOMFull GC 频繁GC 停顿时间过长(超…

OneLLM:对齐所有模态的框架!

深度学习自然语言处理 原创作者:wkk 今天为大家介绍香港中文大学联合上海人工智能实验室的最新研究论文,关于在LLM时代将各种模态的信息对齐的框架。 论文:OneLLM: One Framework to Align All Modalities with Language地址:http…

vue中实现使用相框点击拍照,canvas进行前端图片合并下载

拍照和相框合成,下载图片dome 一、canvas介绍 Canvas是一个HTML5元素,它提供了一个用于在网页上绘制图形、图像和动画的2D渲染上下文。Canvas可以用于创建各种图形,如线条、矩形、圆形、文本等,并且可以通过JavaScript进行编程操作。 Canvas元素本身是一个矩形框,可以通…

《Kotlin核心编程》笔记:面向对象

kotlin 中的类 // Kotlin中的一个类 class Bird {val weight: Double 500.0val color: String "blue"val age: Int 1fun fly() { } // 全局可见 }把上述代码反编译成Java的版本,然后分析它们具体的差异: public final class Bird {privat…

逆向经历回顾总结

逆向经历回顾总结 一、前言 将自己的逆向经验做个总结,希望新手对逆向大方向能快速了解。高手有啥不一样的经验也可以讨论讨论。 二、个人经历 本人入行逆向全因一部韩剧“幽灵”,里面涉及渗透、病毒分析、取证的攻防对抗,我觉得对新手来说…