验证数据库中的数据:sql vs code

时间:2009-02-04 08:03:11

标签: sql

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

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

  • 您是否会检查代码中的锁定标志,然后更新条目

  • 最好将它组合成一个SQL查询,如果是这样,任何例子?

编辑:你如何结合更新&检查一个SQL语句?

5 个答案:

答案 0 :(得分:6)

你应该两个都做。数据库应使用更新触发器来确定是否可以更新行 - 这将阻止任何人意外地更新后台中的行。应用程序应检查是否应该能够更新行并相应地执行操作。

答案 1 :(得分:1)

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

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

这不会引发错误,但会更新0行 - 您应该能够在更新后测试。

至于哪个更好,我认为如果这个锁定标志很重要,那么:

  • 必须检查/强制执行数据库以确保它不会被任何访问方法侵犯
  • 可能 在应用程序中检查/强制执行此操作,如果这更加用户友好

答案 2 :(得分:0)

我会检查代码中的锁定标志,然后(假设记录未锁定)运行更新查询,同时在查询中设置锁定标志。这样它就可以包装在一个事务中并一次性提交/回滚。

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

根据经验,我总是更愿意检查代码中的所有内容,并考虑在此之后编写数据库约束。让数据库对你执行一致性检查很酷,而且比你在代码中执行它更快,但是你在数据库中加入一些逻辑并且需要付出一些代价。这些约束可能会依赖于供应商,更糟糕的是,您是否可以在开发环境中对这些限制执行自动化测试?

所以我考虑将这种检查作为一个额外的安全网放在数据库中,但不会单独依赖它们。