如何更新表中的行或插入不存在的行?

2023-12-08

我有以下计数器表:

CREATE TABLE cache (
    key text PRIMARY KEY,
    generation int
);

我想增加其中一个计数器,或者如果相应的行尚不存在,则将其设置为零。有没有办法在标准 SQL 中没有并发问题的情况下做到这一点?该操作有时是事务的一部分,有时是单独的。

如果可能的话,SQL 必须在 SQLite、PostgreSQL 和 MySQL 上运行且未经修改。

搜索产生了几个想法,这些想法要么受到并发问题的困扰,要么特定于数据库:

  • Try to INSERT一个新行,以及UPDATE如果有错误。不幸的是,错误INSERT中止当前事务。

  • UPDATE行,如果没有行被修改,INSERT一个新行。

  • MySQL 有一个ON DUPLICATE KEY UPDATE clause.

编辑:感谢所有精彩的回复。看来保罗是对的,而且没有一种单一的、可移植的方法可以做到这一点。这让我感到非常惊讶,因为这听起来像是一个非常基本的操作。


MySQL(以及随后的 SQLite)也支持 REPLACE INTO 语法:

REPLACE INTO my_table (pk_id, col1) VALUES (5, '123');

这会自动识别主键并查找要更新的匹配行,如果未找到则插入新行。

文档:https://dev.mysql.com/doc/refman/8.0/en/replace.html

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

如何更新表中的行或插入不存在的行? 的相关文章

  • 当您执行“SELECT *”时,SQL Server 如何确定列的顺序?

    当您执行以下操作时 SQL Server 如何确定列的顺序SELECT 我知道 订购依据 对于订购至关重要data 但我预计列名保持一致 注意 我的代码是not取决于返回列的实际顺序 我只想知道 SQL Server 如何决定对列名进行排序
  • 带有 postgres 的 DOCKER 容器,警告:无法打开统计文件“pg_stat_tmp/global.stat”:不允许操作

    我有一个使用 yml Dockerfile 等从几个不同图像构建的 DOCKER 容器 到目前为止 一切都构建并运行良好 除了我在标题中看到的这个问题 index db 1 2021 02 22 23 18 33 388 UTC 31 WA
  • MySQL创建表中的日期格式

    我必须使用 MySql 创建一个表 它可以按以下格式存储日期 我尝试过如下 CREATE TABLE birth date DATE 但它不起作用 因为日期格式是 YYYY MM DD 我该怎么办 谢谢 MySQL 或几乎任何其他数据库 中
  • 如何设置 Hibernate 读取/写入不同的数据源?

    使用 Spring 和 Hibernate 我想写入一个 MySQL 主数据库 并从基于云的 Java Web 应用程序中的另一个复制从属数据库中读取数据 我找不到对应用程序代码透明的解决方案 我真的不想更改我的 DAO 来管理不同的 Se
  • 保护存储过程

    我想知道是否有一种方法可以对某些用户隐藏存储过程的文本 我正在使用 MySQL 5 1 48 和 Net Connector 6 2 3 以及 Visual Studio 2008 SP1 我在 MySQL 中有两个用户 一个是 root
  • T-SQL 问题:查询 XML

    任何人都可以告诉我如何从这些数据生成 DATA Key ParentKey 5 NULL 25 5 33 25 26 5 27 5 34 27 28 5 29 5 这个 XML 结果 RESULTS
  • sqlite.net + monotouch = SIGSEGV 崩溃

    我们正在使用以下内容 Xamarin 3 Xamarin 表单 单点触控 sqlite net iOS模拟器 硬件 该应用程序在后台线程上与服务器同步数据 整个应用程序只共享一个 SQLite 连接对象 前台查询在后台同步运行的同时执行 所
  • 表被指定两次作为 INSERT 的目标和单独的数据源

    我做了这个查询 但它给了我错误 就像标题中一样 INSERT INTO data waktu vaksinasi id binatang id vaksin tanggal vaksin status vaksin VALUES 1 1 S
  • 插入MYSQL时自动初始化GETDATE()

    类似问题 https stackoverflow com questions 17700239 mysql column automaticly current time of insert w3schools 也许有用的链接 http w
  • 如何获取 PostgreSQL 中表上所有索引的列名列表?

    我有这个查询来获取表上的索引列表 SELECT ns nspname as schema name tab relname as table name cls relname as index name am amname as index
  • SQL最近的命令?微软SQL

    我只是编写一个查询来查看我的客户数据库并列出他们下了多少订单等 我正在努力添加到此查询中的是只显示该电子邮件的最新 OrderID 有任何想法吗 这是我的查询 select top 1000 BuyerEMail COUNT HowMany
  • 在“GROUP BY”子句中重用选择表达式的结果?

    在 MySQL 中 我可以有这样的查询 select cast from unixtime t time Y m d H 00 as datetime as timeHour from some table t group by timeH
  • SQL 用随机数据填充表

    我有一个包含两个字段的表 id UUID 是主键并且 描述 var255 我想用SQL语句插入随机数据 我希望这个描述是随机的 PS 我正在使用 PostgreSQL 我不确定这是否符合 随机描述 的要求 也不清楚您是否想要生成完整的数据
  • MySQL Spatial CONTAINS 显示错误结果

    我的 MySQL 空间搜索有一个奇怪的行为 我在 GEOM 字段 葡萄牙边界 中创建了一个多边形 然后我尝试在内部找到一个点 发现没问题 下一次尝试是查找多边形外部的点 但查询仍返回 1 个找到的行 请帮忙 我做错了什么 为什么它会找到多边
  • 用于选择项目/属性列表中具有多个属性的项目的 SQL 语句是什么?

    假设我有一个表 其中列出的项目和属性如下 frog green cat furry frog nice cat 4 legs frog 4 legs 我想从项目列中选择同时具有绿色和 4 条腿属性的唯一对象 在这种情况下 我希望只返回青蛙对
  • 自动递增和最后插入 ID

    我在用着AUTO INCREMENT我想获取插入行的 ID 以便我可以使用更新另一个表ID作为两个表之间的公共字段 我明白LAST INSERT ID会排在最后ID 然而 我担心的是 数据库被许多用户同时访问 因此 可能有另一个进程访问该表
  • 获取 Blob 图像并将该图像转换为 Bitmap 图像

    我正在从数据库中获取 blob 格式的图像 我想将其转换为位图图像 我用来将位图转换为 Blob 的代码放在下面 但是请告诉我如何反转它 ByteArrayOutputStream boas new ByteArrayOutputStrea
  • 关于mysql建表的几个问题

    CREATE TABLE favorite food person id SMALLINT UNSIGNED food VARCHAR 20 CONSTRAINT pk favorite food PRIMARY KEY person id
  • 获取直方图数据

    有没有办法在 MySQL 中指定 bin 大小 现在 我正在尝试以下 SQL 查询 select total count total from faults GROUP BY total 生成的数据足够好 但行太多 我需要的是一种将数据分组
  • MySQL - 通过部分单词匹配和相关性评分进行高效搜索(全文)

    如何进行 MySQL 搜索 既匹配部分单词 又提供准确的相关性排序 SELECT name MATCH name AGAINST math IN BOOLEAN MODE AS relevance FROM subjects WHERE M

随机推荐

  • Rails,生产环境,“对象不缺少常量”

    所以我觉得我很愚蠢 很长一段时间没有检查在生产环境中的运行 现在我正在尝试部署 我遇到了这个恼人的错误 有任何想法吗 lib history tools rb module HistoryTools def self included ba
  • PHP:如何从时区名称(例如:America/New_York)获取时区值(例如:东部标准时间)?

    是否有 PHP 函数可以在时区名称之间进行转换 例如此处找到的函数 http php net manual en timezones america php 和 值 例如东部标准时间或太平洋夏令时间 不想在区域之间进行转换 只需获取给定 A
  • 使用文本缩放 svg 以适合 viewBox

    很难知道文本需要什么尺寸 尤其是在旋转时 这样一来 很容易把viewBox弄得太小 然后文字就消失在viewBox之外了 然而 如果 viewBox 太大 那么就会有大量额外的空白区域也会被缩放 有没有办法缩放 viewBox 或 svg
  • PWA 离线模式无法从移动浏览器上的缓存加载

    我写了一个简单的 PWA 当前版本 基于本教程 by Vaadin 它运行良好 在 Chrome 中进行了测试 也在离线模式下进行了测试 在移动设备上使用它时 会出现问题 保存PWA后 启动一次 运行良好 然后关闭后 打开飞行模式并重新启动
  • jQuery Mobile 滑块更改事件

    我在监听 jQuery Mobile 滑块的更改事件时遇到困难 在该页面中 事件正确触发了事件 slidestop http jsfiddle net 2HEcY The same我页面中的代码不会触发任何内容 http www maria
  • 函数“execle”错误的隐式声明

    我不断得到 函数 execle 的隐式声明在 C99 中无效 编译下面的代码时 我缺少什么 include
  • 重新安装后的 Haskell 环境

    我最近重新安装了我的 Haskell 环境 因为我认为在将我的 Mac OS X 更新到 Mavericks 后 我已经无法恢复它了 现在每次我跑步cabal install cabal install 我收到以下错误 Resolving
  • 发送电子邮件到本地域

    我有一个从网站发送电子邮件的简单方法 local vars using var mail new MailMessage from sendTo using var smtp new SmtpClient mail CC Add cc ma
  • Lua中获取随机数的其他方法

    我正在寻找一种替代方法来在Lua中获取一个介于最小和最大数字之间的随机数 而不使用math random 有什么办法吗 它不一定是一个简单的方法 就像评论所暗示的那样 在类 Unix 系统上 您可以从中读取字节 dev random or
  • 如何转换 Oracle 中的“旧版”左外连接语句?

    我在 Oracle 数据库中有两个表 A 和 G 可以根据帐号将它们连接在一起 需要注意的是 其中一个表 G 的记录比另一个表少大约 80 条 当我一起查询两个表时 我需要获取所有行 以便我们在缺失的 80 行的列中看到 NULL 数据 我
  • 科尔多瓦中的文件大小函数

    也许这是一个简单的问题 但我已经搜索了两天 但找不到答案 我正在科尔多瓦开发一个文件管理器只是为了学习科尔多瓦插件文件 我使用此函数获得了文件夹中的文件列表 window resolveLocalFileSystemURL cordova
  • 量角器 - 无法读取未定义的属性“$$testability”

    我收到一条错误 内容如下 Error while waiting for Protractor to synce with the page Cannot read property testability of undefined 下面是
  • Scala - 用特定文本替换 xml 元素

    所以我有这个XML a blah a 我想把它改成 a someValueIDoNotKnowAtCompileTime a 目前 我正在看这个问题 然而 这只是将值更改为 2 我想要的是完全相同的东西 但是能够定义值 以便它可以在运行时更
  • 从主机名获取域名扩展

    Extract 域名扩展 e g com 不是使用正则表达式从主机名中获取的域名 例如 google com 输入 gt 输出 www google com gt com google com gt com google co uk gt
  • 在 AWS AppSync 中对 SQL 查询的 JSON 对象进行字符串化

    Question 如何在 Appsync 速度模板中对 SQL 语句的 JSON 对象进行字符串化 解释 我有一个 Aurora RDS 表 其中有一列数据类型为 JSON AppSync API 已连接到 RDS 我的 GraphQL 模
  • 将一个数据表的列添加到另一个数据表

    嘿 所有人都需要一点帮助来排序这个表的循环 似乎无法将工作示例应用于模型 无论如何 它就在这里 我有 2 个数据表 每个数据表都有不同的数据和不同的值 唯一的共同值是日期 第一个表包含我想要的所有内容 除了一列值 来自另一个表 因此我需要将
  • 在现有 geom_sf 图层下方插入 geom_sf 图层

    我有一张印度的基本地图 其中包含州和边界 一些标签以及存储为 gg 对象的许多其他规范 我想生成许多带有区域图层的地图 这些地图将承载来自不同变量的数据 为了防止地区地图覆盖州和国家边界 它必须位于之前所有代码之前 我想避免重复 我想我可以
  • 法律散文使用 Corda

    这是之前回答的后续问题法律散文乔尔提出的问题 根据要求创建了单独的问题 LegalProseReference uri foo bar com my legal doc html public class MyContract implem
  • 在 PHP 中,为什么我的会话变量保留为引用?

    这是代码 通过验证 IP 地址来检查会话 ID 是否被欺骗是一个简单的操作 session start session ip address SERVER REMOTE ADDR if isset SESSION SESSION IP AD
  • 如何更新表中的行或插入不存在的行?

    我有以下计数器表 CREATE TABLE cache key text PRIMARY KEY generation int 我想增加其中一个计数器 或者如果相应的行尚不存在 则将其设置为零 有没有办法在标准 SQL 中没有并发问题的情况