验证数据库中的数据:sql与代码

验证数据库中的数据:sql与代码,sql,Sql,“我的数据库架构”具有“锁定”设置,这意味着一旦设置了条目,就无法对其进行更改 在设置锁定标志之前,我们可以更新其他属性。因此: 请检查代码中的锁定标志,然后更新条目好吗 或 将其合并到SQL查询中会更好吗?如果是,有任何示例吗? 编辑:如何将更新和检查组合到一个SQL语句中?我将检查代码中的锁定标志,然后假设记录未锁定,则运行更新查询,并在查询中设置锁定标志。通过这种方式,它可以被包装在事务中,并一次提交/回滚。如果您的DBMS提供此功能来强制执行该标志,我将使用触发器。如果设置该标志,则所有

“我的数据库架构”具有“锁定”设置,这意味着一旦设置了条目,就无法对其进行更改

在设置锁定标志之前,我们可以更新其他属性。因此:

请检查代码中的锁定标志,然后更新条目好吗 或

将其合并到SQL查询中会更好吗?如果是,有任何示例吗?
编辑:如何将更新和检查组合到一个SQL语句中?

我将检查代码中的锁定标志,然后假设记录未锁定,则运行更新查询,并在查询中设置锁定标志。通过这种方式,它可以被包装在事务中,并一次提交/回滚。

如果您的DBMS提供此功能来强制执行该标志,我将使用触发器。如果设置该标志,则所有更新都将失败

update table
set ...
where key = ...
and locked ='N';

然后您可以创建一个特殊的查询来更新标志。您的触发器可以检查所谓的更新,并允许标志在必要时弹回。这样,无论TSQL是好的还是恶意的,一旦设置了标志,就没有人可以更新您的行。

您应该同时执行这两项操作。数据库应该使用update触发器来决定是否可以更新行—这将防止任何人意外地从后台表更新行。应用程序应该检查是否能够更新行并相应地执行操作
<> p>所以我会考虑把这种检查放在数据库中作为一个附加的安全网络,但不依赖于它们。

如何将更新和检查合并到一个SQL语句中?

update table
set ...
where key = ...
and locked ='N';
这不会引发错误,但会更新0行—您应该能够在更新后对其进行测试

至于哪个更好,我的观点是,如果这个锁定标志很重要,那么:

您必须在数据库中检查/强制执行它,以确保任何访问方法都不会违反它 如果更方便用户,您也可以在应用程序中检查/强制执行它
完全不同意-DBMS的工作是管理数据,这意味着某些逻辑,如数据规则,属于数据库。为了方便自动化测试而将规则放在错误的地方似乎有点反常。