仅当新值更高时才更新列

Tom*_*Ace 5 sqlite

我想添加一个约束,因此只有当传入的新值大于其当前值时,列才会更新其值。否则就应该默默地忽略。在伪代码中:

CREATE TABLE t (col INTEGER CHECK (new.value > col.value) ON CONFLICT IGNORE)
Run Code Online (Sandbox Code Playgroud)

SQLite 3.7.4。

小智 5

我决定使用MAX()

UPDATE t SET col = MAX(col, newval) [, col2 = xxx, ...]
Run Code Online (Sandbox Code Playgroud)

尽管从技术上讲它确实覆盖该值,但至少它永远不会被降低。

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

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