Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sqlite 仅在新值较高时更新列_Sqlite - Fatal编程技术网

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, ...]