Sqlite 仅在新值较高时更新列
我想添加一个约束,这样只有当传入的新值大于其当前值时,列才会更新其值。否则它应该默默地忽略。在伪代码中:Sqlite 仅在新值较高时更新列,sqlite,Sqlite,我想添加一个约束,这样只有当传入的新值大于其当前值时,列才会更新其值。否则它应该默默地忽略。在伪代码中: CREATE TABLE t (col INTEGER CHECK (new.value > col.value) ON CONFLICT IGNORE) SQLite 3.7.4.我决定使用MAX(): 虽然从技术上讲它确实覆盖了该值,但至少它永远不能降低 使用WHERE子句强制执行此约束时,如果该子句禁止基于col值的匹配,则受更新影响的其他列(例如,col2)将不会更新 如果违
CREATE TABLE t (col INTEGER CHECK (new.value > col.value) ON CONFLICT IGNORE)
SQLite 3.7.4.我决定使用
MAX()
:
虽然从技术上讲它确实覆盖了该值,但至少它永远不能降低
使用WHERE子句强制执行此约束时,如果该子句禁止基于col值的匹配,则受更新影响的其他列(例如,col2
)将不会更新
如果违反了约束,我无法计算出触发器忽略更新的正确语法。无论如何,我认为使用触发器会比简单的MAX()调用产生更大的开销。这应该通过在任何设置该列的更新查询中使用WHERE子句来管理。如果您必须在数据库程序员的背后管理它,您将需要一个触发器。尽管触发器可能会产生更大的开销,但应用程序或睡眠不足的数据库设计器不能忘记或忽略触发器。
UPDATE t SET col = MAX(col, newval) [, col2 = xxx, ...]