首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锁定用户的数据库记录

问锁定用户的数据库记录
EN

Database Administration用户
提问于 2017-04-17 18:20:46
回答 2查看 829关注 0票数 0

当用户在记录中时,我有一个应用程序开发需求来锁定用户的数据库记录。然后在他们完成后解锁。是否有一种方法可以在数据库级别而不是代码级别进行此操作?这是在数据库级别还是在代码级别?

当我说“锁定”时,我的意思是其他人可以查看,但不能编辑。

EN

回答 2

Database Administration用户

发布于 2017-04-17 20:26:54

有关详细信息,请参阅此文章。并发级别由您在SQL服务器或连接中选择的隔离级别控制。除非指定或更改,否则在安装SQL服务器并在事务中不覆盖时,提交的读是默认的隔离级别。

事务指定一个隔离级别,该级别定义一个事务必须与其他事务所做的资源或数据修改隔离的程度。隔离级别被描述为允许并发副作用,例如脏读或幻影读取。

也就是说,尽管您选择了任何隔离级别,但数据修改始终是受保护的。

选择事务隔离级别不会影响为保护数据修改而获取的锁。事务总是对它修改和保存的任何数据获得独占锁,直到事务完成为止,而不管为该事务设置的隔离级别如何。对于读取操作,事务隔离级别主要定义不受其他事务修改影响的保护级别。

如果您至少没有达到可重复读取隔离级别,仍然可能会遇到丢失的更新。有关可重复阅读的详细信息,请参阅此文章。

这是一个很好的文章,用示例解释隔离级别。

票数 1
EN

Database Administration用户

发布于 2017-04-19 11:18:52

你的问题并没有给出关于“用户在记录中的时间”的详细信息。

扩展的数据库锁定方案可能会破坏事务日志及时“清除”的能力,而某些隔离级别“可能会带来意想不到的后果,比如允许其他人读取”以前的数据“,而不被告知数据正在”运行中“。

如果一个用户基本上可以带一个帐篷和睡袋到这个记录中的“露营地”几秒钟、几分钟、回家、度假等等,我强烈建议在代码中实现这种“锁定”。

在我的公司(保险),我们使用一个通用的'RESOURCE_LOCK‘表,基本上允许我们’文档‘的’资源‘(政策,索赔,比尔,档案等)。是“锁定或退房”。我们有一个STATUS列,表示工作正在积极进行,而不是在单个“数据库事务”和WNIP (未进行中的工作)中,这意味着资源仍然被锁定,但用户没有“主动”地处理它。我们还捕获了“锁定用户”的UserId和获取“锁”时的时间戳。我们的应用程序是以这样一种方式编写的,即询问这个'RESOURCE_LOCK‘表,并通知其他人’资源‘的’状态‘。这使得我们可以确保只有一个用户可以在给定的时间内处理“资源”,并通知其他用户(“读取器”)数据更改正在进行中。

当然,这不会阻止流氓TSQL语句(在应用程序之外并具有适当权限)更新“锁定”的信息,但这是我们所接受的风险。

最终,你需要为你的特殊情况决定最佳的行动方针。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/171228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档