开发者社区> 问答> 正文

如何更新表中的行或将其插入(如果不存在)??mysql

我有下表的计数器:

CREATE TABLE cache ( key text PRIMARY KEY, generation int ); 我想增加一个计数器,如果相应的行还不存在,则将其设置为零。有没有办法在标准SQL中没有并发问题的情况下做到这一点?该操作有时是事务的一部分,有时是独立的。

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

搜索产生了一些想法,这些想法可能遇到并发问题,或者特定于数据库:

尝试到INSERT新行,UPDATE如果有错误。不幸的是,该错误会INSERT中止当前事务。

UPDATE该行,如果未修改任何行,则为INSERT新行。

MySQL有一个ON DUPLICATE KEY UPDATE子句。

编辑:感谢所有伟大的答复。保罗看起来是对的,并且没有一种可移植的方式来做到这一点。对于我来说,这非常令人惊讶,因为这听起来像是一个非常基本的操作。

展开
收起
保持可爱mmm 2020-05-17 21:08:16 1322 0
1 条回答
写回答
取消 提交回答
  • MySQL(以及随后的SQLite)也支持REPLACE INTO语法:

    REPLACE INTO my_table (pk_id, col1) VALUES (5, '123'); 这会自动识别主键并找到要更新的匹配行,如果找不到则插入新的行。来源:stack overflow

    2020-05-17 21:15:01
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像