您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

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

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

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

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

SQLServer 2022/1/1 18:41:50 有429人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶