我有下表的计数器:
CREATE TABLE cache (
key text PRIMARY KEY,
generation int
);
我想增加一个计数器,如果相应的行还不存在,则将其设置为零。有没有办法在标准SQL中没有并发问题的情况下做到这一点?该操作有时是事务的一部分,有时是独立的。
如果可能,SQL必须在SQLite,PostgreSQL和MySQL上未经修改地运行。
搜索产生了一些想法,这些想法可能遇到并发问题,或者特定于数据库:
尝试到
INSERT
新行,UPDATE
如果有错误。不幸的是,该错误会INSERT
中止当前事务。UPDATE
该行,如果未修改任何行,则为INSERT
新行。MySQL有一个
ON DUPLICATE KEY UPDATE
子句。
编辑:感谢所有的伟大答复。看起来Paul是对的,而且没有一种可移植的方式来做到这一点。这对我来说是非常令人惊讶的,因为这听起来像是一个非常基本的操作。