验证数据库中的数据:sql与代码
“我的数据库架构”具有“锁定”设置,这意味着一旦设置了条目,就无法对其进行更改 在设置锁定标志之前,我们可以更新其他属性。因此: 请检查代码中的锁定标志,然后更新条目好吗 或 将其合并到SQL查询中会更好吗?如果是,有任何示例吗?验证数据库中的数据:sql与代码,sql,Sql,“我的数据库架构”具有“锁定”设置,这意味着一旦设置了条目,就无法对其进行更改 在设置锁定标志之前,我们可以更新其他属性。因此: 请检查代码中的锁定标志,然后更新条目好吗 或 将其合并到SQL查询中会更好吗?如果是,有任何示例吗? 编辑:如何将更新和检查组合到一个SQL语句中?我将检查代码中的锁定标志,然后假设记录未锁定,则运行更新查询,并在查询中设置锁定标志。通过这种方式,它可以被包装在事务中,并一次提交/回滚。如果您的DBMS提供此功能来强制执行该标志,我将使用触发器。如果设置该标志,则所有
编辑:如何将更新和检查组合到一个SQL语句中?我将检查代码中的锁定标志,然后假设记录未锁定,则运行更新查询,并在查询中设置锁定标志。通过这种方式,它可以被包装在事务中,并一次提交/回滚。如果您的DBMS提供此功能来强制执行该标志,我将使用触发器。如果设置该标志,则所有更新都将失败
update table
set ...
where key = ...
and locked ='N';
然后您可以创建一个特殊的查询来更新标志。您的触发器可以检查所谓的更新,并允许标志在必要时弹回。这样,无论TSQL是好的还是恶意的,一旦设置了标志,就没有人可以更新您的行。您应该同时执行这两项操作。数据库应该使用update触发器来决定是否可以更新行—这将防止任何人意外地从后台表更新行。应用程序应该检查是否能够更新行并相应地执行操作作为一个经验法则,我总是喜欢检查代码中的所有内容,然后考虑写DB约束。让数据库为您执行一致性检查是很酷的,而且无可否认比在代码中执行一致性检查要快,但是您在数据库中添加了一些逻辑,并且必须付出一些代价。这些约束可能依赖于供应商,更糟糕的是,您能否在开发环境中对这些约束执行自动化测试
<> p>所以我会考虑把这种检查放在数据库中作为一个附加的安全网络,但不依赖于它们。 如何将更新和检查合并到一个SQL语句中?
update table
set ...
where key = ...
and locked ='N';
这不会引发错误,但会更新0行—您应该能够在更新后对其进行测试
至于哪个更好,我的观点是,如果这个锁定标志很重要,那么:
您必须在数据库中检查/强制执行它,以确保任何访问方法都不会违反它
如果更方便用户,您也可以在应用程序中检查/强制执行它
完全不同意-DBMS的工作是管理数据,这意味着某些逻辑,如数据规则,属于数据库。为了方便自动化测试而将规则放在错误的地方似乎有点反常。