我想添加一个约束,因此如果传入的新值大于其当前值,则列仅更新其值。否则它应该默默地忽略。在伪代码中:
CREATE TABLE t (col INTEGER CHECK (new.value > col.value) ON CONFLICT IGNORE)
SQLite 3.7.4。
答案 0 :(得分:3)
我决定使用MAX()
:
UPDATE t SET col = MAX(col, newval) [, col2 = xxx, ...]
虽然技术上它 会覆盖该值,但至少它永远不会被降低。
当使用WHERE子句来强制执行此约束时,如果该子句根据col的值禁止匹配,则不会更新受UPDATE影响的其他列(例如col2
)。
如果违反约束,我无法确定触发器的正确语法以忽略UPDATE。无论如何,我认为使用触发器会比简单的MAX()调用产生更大的开销。