相关疑难解决方法(0)

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

我有下表的柜台:

CREATE TABLE cache (
    key text PRIMARY KEY,
    generation int
);
Run Code Online (Sandbox Code Playgroud)

我想增加其中一个计数器,或者如果相应的行还不存在则将其设置为零.有没有办法在标准SQL中没有并发问题的情况下执行此操作?该操作有时是交易的一部分,有时是分开的.

如果可能的话,SQL必须在SQLite,PostgreSQL和MySQL上不加修改地运行.

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

  • 尝试换INSERT行,UPDATE如果出现错误.不幸的是,INSERT中止当前事务的错误.

  • UPDATE行,如果没有修改行,则为INSERT新行.

  • MySQL有一个ON DUPLICATE KEY UPDATE条款.

编辑:感谢所有的好评.看起来保罗是对的,并没有单一,便携的方式来做到这一点.这对我来说非常令人惊讶,因为它听起来像是一个非常基本的操作.

mysql sql sqlite postgresql upsert

80
推荐指数
6
解决办法
13万
查看次数

标签 统计

mysql ×1

postgresql ×1

sql ×1

sqlite ×1

upsert ×1