小编典典

在条件成立时,可以使用SQL约束来防止更改特定值吗?

sql

我知道SQL约束会强制数据满足有效性标准。但是,诸如“仅在’finallyed’标志为假时才可以更新学生的成绩”之类的标准呢?应用程序是否必须处理此类更新条件?


阅读 209

收藏
2021-03-23

共1个答案

小编典典

简短的答案:不,当Finalized为’true’时,SQL约束本身不能阻止对列Grade的更改(但允许其他更改)。

几种SQL约束:CHECK,DEFAULT,NOT
NULL,UNIQUE,主键和外键。

这些中的每一个都可以单独或组合限制或影响列的值,但不能阻止对允许值的UPDATE。特别是,这些约束都不能阻止基于“等级”和“完成”的先前值对“等级”和/或“完成”进行更新。

UPDATE触发器可以做到这一点:比较Grade的新值和旧值,如果这些值不同且Finalized =’true’,则使用说明性错误消息回滚UPDATE。

但是,应用程序可以并且应该更优雅地实施这种“业务规则”。规则本身可以对何时可以更改Finalized值进行一些说明。例如,是否可以同时更改成绩并设置Finalized
=’false’?触发逻辑可以处理此类详细信息,因此将其安装为故障保护是合理的,同时还要在应用程序的某个位置(前端/中间件/后端)明确显示规则。

2021-03-23