如果新值更高,则仅更新列

时间:2011-06-19 02:40:51

标签: sqlite

我想添加一个约束,因此如果传入的新值大于其当前值,则列仅更新其值。否则它应该默默地忽略。在伪代码中:

CREATE TABLE t (col INTEGER CHECK (new.value > col.value) ON CONFLICT IGNORE)

SQLite 3.7.4。

1 个答案:

答案 0 :(得分:3)

我决定使用MAX()

UPDATE t SET col = MAX(col, newval) [, col2 = xxx, ...]

虽然技术上它 会覆盖该值,但至少它永远不会被降低。

当使用WHERE子句来强制执行此约束时,如果该子句根据col的值禁止匹配,则不会更新受UPDATE影响的其他列(例如col2)。

如果违反约束,我无法确定触发器的正确​​语法以忽略UPDATE。无论如何,我认为使用触发器会比简单的MAX()调用产生更大的开销。