SQLite Changes() 计算未更改的更新

2023-11-21

我对 SQLite 有疑问changes()函数,根据文档, "返回最近完成的 INSERT、DELETE 或 UPDATE 语句更改、插入或删除的数据库行数“(另请参阅底层 C/C++ 函数的文档).

我希望使用这个函数来检查是否执行了UPDATE与单行相关的语句有really导致该行被更改或不更改。 经过changed我不仅仅意味着该行与语句匹配WHERE条款。不,我的意思是,对于相关行,至少 1 列的值实际上是不同的执行后与执行前相比。如果你问我这是唯一正确的定义change在此背景下。

所以我希望能够检测到这样的changes通过检查是否changes()回报1(行已更改)或0(行不变)执行后立即调用UPDATE陈述。 但令我失望的是,这似乎并没有按预期工作。

请允许我举例说明:

CREATE TABLE People (Id INTEGER PRIMARY KEY AUTOINCREMENT, Name TEXT NOT NULL);
INSERT INTO People (Name) VALUES ("Astrid");
SELECT changes();

Here changes()回报1,正如预期的那样,因为我们只是INSERT编辑 1 行。

UPDATE People SET Name = "Emma" WHERE Id = 1;
SELECT changes();

Here changes()回报1,如预期,因为 1 行是UPDATEd(即实际上changed: the Name of the Person with Id = 1 was "Astrid"但现在是"Emma").

UPDATE People SET Name = "John" WHERE Id = 200;
SELECT changes();

Here changes()回报0,正如预期的那样,因为没有行Id = 200.

到目前为止,一切都很好。但现在看看下面的内容UPDATE声明,其中does确实匹配现有行,但是does not实际上change它根本(Name保持设置为"Emma")...

UPDATE People SET Name = "Emma" WHERE Id = 1;
SELECT changes();

Here changes()回报1,而我当然希望0 :-(.

如果该函数被称为类似的东西,也许这是有意义的matched_rows() or affected_rows()。但对于一个名为changes(),并且按原样记录下来,这种行为让我觉得不合逻辑,或者充其量是令人困惑。

所以无论如何,有人可以解释为什么会发生这种情况,或者更好的是,建议一种替代策略以可靠(且有效)的方式实现我的目标?

我能想到的就是实际做类似的事情SELECT * FROM People WHERE Id = x,将所有返回的列值与我要在UPDATE语句,从而决定我是否需要执行UPDATE根本不。但这效率不高,对吧? 当然,在这个玩具示例中,它可能并不重要,但在我的实际应用程序中,我正在处理具有更多列的表,其中一些列(可能很大)BLOBs.


数据库不比较新旧值;即使值碰巧相同,任何更新的行也始终算作“已更改”。 这文档

UPDATE 影响...那些将 WHERE 子句表达式计算为布尔表达式的结果为 true 的行。

如果你想检查旧值,你必须显式地执行:

UPDATE People SET Name = 'Emma' WHERE Id = 1 AND Name IS NOT 'Emma';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLite Changes() 计算未更改的更新 的相关文章

  • 帮助子查询!返回多于 1 行

    我不明白返回多行的问题 这是我的桌子 BBC name region area population gdp Afghanistan South Asia 652225 26000000 Albania Europe 28728 32000
  • 仅当值不同时 Postgres UPSERT(插入或更新)

    我正在更新 Postgres 8 4 数据库 来自 C 代码 基本任务非常简单 更新现有行或插入新行 如果尚不存在 通常我会这样做 UPDATE my table SET value1 newvalue1 updated time now
  • SQL - .NET - SqlParameters - AddWithValue - 未指定参数类型时是否会对性能产生负面影响?

    http msdn microsoft com en us library system data sqlclient sqlparametercollection addwithvalue aspx http msdn microsoft
  • 使用 Microsoft SQL Server 管理复制表

    需要使用复制表Microsoft SQL Management Studio 2008 TABLE 还需要复制所有表行 主键 ID 在 SSMS 中打开一个新的查询窗口 然后执行如下操作 SELECT INTO NewTable FROM
  • 私人消息系统。列出每个对话的最后一条消息

    可以说这是数据库结构 SELECT FROM pms where id to 1 or id from 1 这将返回他已接收或发送的所有消息 那么我如何检索最后一条消息each用户1可能进行的对话 PD 当两个用户之间存在一条或多条消息时
  • 间歇性 SQLiteException:dbopen 上不是错误

    在我的应用程序中 我在很多情况下使用数据库 但有一种情况我遇到异常 但不是每次都出现异常 并且可以重现它 还 这种情况仅发生在操作系统版本 2 3 7 和 2 1 update 1 上 代码 public void removeOldOcc
  • 空字符串与NULL

    我有一个表 其中一些行有一些空白cells 我尝试使用 IS NULL 函数选择此类行 但查询选择了 0 行 select from zzz fkp registration female where fname is null 0 row
  • 在 Linux 中,Distinct SQL 无法与 UNNEST 一起使用

    当我在窗口系统中运行此查询时 行为正确 UNNEST 但是当我运行这个查询时 Linux 的行为不同 unnest 重复记录列表在不同的行上 SELECT DISTINCT billing billmanagement creation d
  • SQL Server 条件流

    如果我写两个SELECT中的语句IF EXISTS条件与AND这些选择查询之间的子句 即使第一个查询是否都会执行两个查询SELECT返回假 IF EXISTS SELECT AND EXISTS SELECT BEGIN END 在这种情况
  • 将图像保存和检索到数据库的最佳方法

    寻求上述建议 希望创建一个 SQLite 数据库 其中每行数据主要是字符串 但我也想保存从手机拍摄的图像 是否建议或可能保存位图图像的编码 Base 64 字符串并在调用数据行时将其转换回图像 我还在某处读到有一个 blob 列类型可以保存
  • 如何中止触发器中的多行插入

    使用 SQL Server 2005 我已经声明了一个触发 AFTER INSERT UPDATE 的触发器 在这个触发器中 我使用 WHILE 和 CURSOR 在 INSERTED 表的行上循环 当我发现一行不满足特定条件时 我希望触发
  • 如何从 Oracle 中获取格式化的 XML

    我对 Oracle 缺乏经验 并且在将数据导出为 XML 时遇到问题 我已经设法让这个查询正常工作 但 XML 的格式似乎是固定的 对我来说不起作用 这是查询 SELECT value em getClobVal AS output FRO
  • Sequelize 中的 FOR SHARE 和 FOR UPDATE 语句

    当我们使用事务时 常规 SQL 查询可以包含 SELECT FOR SHARE 和 SELECT FOR UPDATE 语句 有没有办法用 Sequelize 设置相同的语句 我还没有找到这些选项 也许有一些技巧 需要什么 您可以在这里阅读
  • iOS7 后台同步

    我们必须开发一个应用程序 无论该应用程序是在前台还是在后台 都支持在某个时间间隔进行数据同步操作 我想知道在iOS7中 当应用程序在后台运行时 是否可以同步数据 即调用网络服务 我们可以在应用程序处于后台时访问 SQLite 数据库文件 我
  • MySQL - 基于日期加入

    是否可以根据同一日期连接两个表 而不考虑时间 就像是 从预约左侧加入销售 约会 日期 销售 日期 唯一的问题是它是一个日期时间字段 所以我想确保它只查看日期并忽略时间 你可以这样做 FROM appointments LEFT JOIN s
  • Azure 上的 SSAS 表格?

    我正在尝试部署 ssas 表格模型 我不知道我在做什么 我用VS2013在SQL Server 2008 R2上制作了多维 我想尝试将 Tabular 与 Power BI 结合使用 所以我设置了一个 SQL Azure DB 我有 Azu
  • 树形表的sql查询

    我有一个树形结构的表 id parentId name 1 0 Category1 2 0 Category2 3 1 Category3 4 2 Category4 5 1 Category5 6 2 Category6 7 3 Cate
  • 检查SQL Server数据库表中是否存在表或列

    在 SQL Server 数据库中创建列或表之前 我想检查所需的表和 或列是否存在 我已经四处搜寻 到目前为止发现了两种方法 我不想使用存储过程 通过使用SqlCommand ExecuteScalar 方法并捕获异常来确定表 列是否存在
  • SQL 查询运行时间太长,asp.net 停止响应

    我有一个 SQL 查询 大约需要 10 分钟才能完成 该查询的结果显示在 asp net 网页上 这里的问题是 当我在 SQL Server 上运行查询时 它工作正常 但是当从网页触发查询时 网页上不会显示任何结果 数据库大小约为9 GB
  • MySQL JOIN 的评估顺序是什么?

    我有以下查询 SELECT c FROM companies AS c JOIN users AS u USING companyid JOIN jobs AS j USING userid JOIN useraccounts AS us

随机推荐

  • 如何从字符串中删除换行符?

    我有一个以下格式的字符串 string s This is a Test String n This is a next line t This is a tab n 我想删除所有出现的 n and r从上面的字符串 我努力了string
  • stl::multimap - 如何获取数据组?

    Multimap 本质上具有按键排序的数据组 我想要一种方法来访问这些单独的组并获取它们的聚合值 例如 在一个std multimap lt string int gt 我存储 Group1 1 Group1 2 Group1 3 Grou
  • 类型引用>() { }

    从几天前开始 我开始从事一个网络服务项目 该项目正在使用Jackson编组和解组JSON 对象 所以我的问题是 为什么我总是必须把 当我创建一个实例时TypeReference 我知道构造函数是protected 但为什么是protecte
  • 如果使用 bash 以外的任何东西,我怎样才能拥有 term.el (ansi-term) 跟踪目录

    使用 eshell 或 ansi term 和 bash 时 emacs 会根据您所在的目录更改默认目录变量 所以如果我搬到 home user code project然后使用 ido find file 打开一个文件 它以 CWD 启动
  • 当参数是重载函数时,重载解析如何工作?

    Preamble C 中的重载解析可能是一个过于复杂的过程 理解控制重载解析的所有 C 规则需要付出相当多的脑力劳动 最近我想到参数列表中重载函数名称的存在会增加重载解析的复杂性 由于它恰好是一个广泛使用的案例 所以我发布了一个问题并收到了
  • 如何使用缩进作为 bison 和 flex 的块分隔符

    我很想知道如何在 bison flex 中实现缩进作为块分隔符 就像在 python 中一样 我正在编写自己的编程语言 主要是为了好玩 但我打算将其与游戏引擎一起使用 我将尝试想出一些特殊的东西来最小化样板文件并最大化开发速度 我已经写了一
  • 批量消费消息-RabbitMQ

    我能够使用上面的代码使用多个生产者发送到具有不同路由键的同一交换的多条消息 并且能够将每条消息插入到数据库中 但这会消耗太多资源 因为消息将被一个接一个地插入到数据库中 所以我决定进行批量插入 我发现我可以设置BasicQos 在 Basi
  • 以编程方式渲染 Laravel 7 组件

    我有一个 Laravel 7 组件 如下所示 class Input extends Component public name public title public value public type text Create a new
  • LESS:在 :before 中使用 font-awesome

    我想要一个带有自定义字体 颜色和左侧项目符号的标题的 CSS 选择器 所以我希望我的标题使用我的自定义字体 它是 before伪元素使用 font awesome 所以我想要我的 before拥有 fa类 而整个元素没有这个类 我有这个ht
  • 使用 nginx 和 Gunicorn 运行多个 django 项目

    我在用Ubuntu 18 服务器并使用nginx with gunicorn我跟随数码海洋服务器设置教程 我成功完成了一个项目 但现在我需要在服务器下运行多个项目 这是我的枪鸟设置 command sudo nano etc systemd
  • WCF中的WS是什么意思?

    在wcf中 什么是WS 在WCF中是什么意思 有什么理由将其分组吗 它们是 Web 服务 WS 标准 这篇博文解释一下 WCF 实现的那些 将它们分组是因为它们共同构成了 WS 架构
  • 从 int 到 shared_ptr 的隐式转换

    考虑下面的代码 include
  • 如何拆分分隔字符串以便可以访问单个项目?

    使用 SQL Server 如何拆分字符串以便可以访问项目 x 取一个字符串 Hello John Smith 如何按空格分割字符串并访问索引 1 处应返回 John 的项目 我不相信 SQL Server 有内置的 split 函数 所以
  • 具有交互项的固定效应回归会导致错误

    我正在尝试使用表示路线的地理区域 LoadArea DischargeArea 的交互项来估计面板数据集 使用固定效应规范 它不喜欢交互项 LoadArea DischargeArea 并且在汇总回归时会产生以下错误 mult fe lt
  • 为什么浏览器允许关闭 Javascript? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我很好奇为什么现代浏览器允许关闭 Javascript 现在很清楚 要做任何实质性的现代 Web 应用程序 您都需要集成一些高级别的 Javascript 为什么 javascript 不
  • Windows Phone 创建像 Facebook 一样的侧边菜单栏

    我是 Windows Phone 7 开发新手 我正在尝试创建类似于 Facebook 上使用的侧菜单栏 我创造了usercontrol并添加了不同屏幕的按钮 我还创建了PhoneApplicationPage并添加了一个按钮 当我单击该按
  • MATLAB:设置要并行应用的线条的颜色和样式顺序

    当你设置DefaultAxesColorOrder and DefaultAxesLineStyleOrderMATLAB 将首先循环使用第一种样式的所有颜色 然后再次使用第二种样式循环使用所有颜色 依此类推 看到这个文档 or 相关问题
  • Scala - 柯里化和默认参数

    我有一个带有两个参数列表的函数 我试图部分应用并与柯里化一起使用 第二个参数列表包含所有具有默认值 但不是隐式的 的参数 像这样的东西 def test a Int b Int 2 c Int 3 println a b c 现在 以下一切
  • 如何在Delphi中跟踪TScrollBox的滚动

    有没有简单的方法可以用滚动条跟踪 TScrollbox 内容的滚动 我有几个 TScrollBox 组件 每个组件内部都有一些组件 并且希望保持它们同步 如果其中一个滚动框滚动 垂直或水平 我需要同步滚动其他滚动框 这就是为什么我需要知道滚
  • SQLite Changes() 计算未更改的更新

    我对 SQLite 有疑问changes 函数 根据文档 返回最近完成的 INSERT DELETE 或 UPDATE 语句更改 插入或删除的数据库行数 另请参阅底层 C C 函数的文档 我希望使用这个函数来检查是否执行了UPDATE与单行