我想添加一个约束,因此只有当传入的新值大于其当前值时,列才会更新其值。否则就应该默默地忽略。在伪代码中:
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() 调用产生更大的开销。
| 归档时间: |
|
| 查看次数: |
2302 次 |
| 最近记录: |