我有一个存储到关系数据库中的版本化对象。条目由整数 ID 和修订号标识。在存储新版本时,我想自动增加数字
-- Describe FOO
CREATE TABLE foo (
id INTEGER NOT NULL,
revision INTEGER NOT NULL,
content TEXT,
PRIMARY KEY (id, revision)
)
如果修订已经存在,我想使用选择查询自动给出最高修订号 + 1,如果找不到结果,则自动给出 0。第一部分很简单,例如,如果我有以下数据:
id | revision | content
1 | 0 | foo
1 | 1 | bar
1 | 2 | bam
1 | 3 | bang
然后
select max(revision) + 1 from foo where foo.id = 1
> 3
当我查询 foo.id = 2 时,是否可以对查询进行简单的调整以使其返回 0?
count(*)
将是一个选项,但即使我们使用只写一次的方案,我也不想依赖数据库中存在的 0-current_revision 的所有修订。