当前位置: 首页 > 面试题库 >

锁定数据库记录以进行编辑

伯茂才
2023-03-14
问题内容

我有一个SQL Server 2008数据库和一个asp.net前端。

当用户当前正在编辑记录但不确定哪种是最好的方法时,我想实现一个锁定。

我的想法是isLocked为记录创建一列,并在用户拉出该记录时将其设置为true,这意味着所有其他用户都具有只读访问权限,直到第一个用户完成编辑为止。

但是,如果会话超时并且他/她从不保存/更新记录,该记录将保留为isLocked = true,表示其他人无法对其进行编辑,对吗?

如何实现某种类型的会话超时,并isLocked在会话超时时(或在预定义的时间段之后)自动设置为false

应该在asp.net端还是在SQL端实现?


问题答案:

完全不做。请改用开放式并发。

悲观锁定是可能的,但不能从.Net应用程序锁定。.Net应用程序场在技术上不能保持长期存在的会话来保持锁定(通过sp_getapplock或更糟的是通过真实数据锁定获得),因为.Net应用程序场:

  • 实例的负载平衡请求
  • 不要在HTTP调用之间保留请求堆栈
  • 回收应用程序域

在您说“我没有服务器场,只有一台IIS服务器”之前,我会指出您 现在 可能只有一台IIS服务器,如果您依靠它,您将永远无法扩展,而您 仍然
可以应用程序域回收的问题。

通过应用程序特定的更新(例如,“
is_locked”字段)模拟锁定在实际使用中存在严重缺陷,这是您已经开始看到的原因以及更多其他原因。当推来推这是唯一的方法 可以
工作进行,但我从来没有听说过的 说:“哎呀,我真的很高兴我们实现了html" target="_blank">数据的写入悲观锁定!”。从来没有人

由于完全相同的原因,应用程序层锁定也不起作用。.Net服务器场无法使用后端锁定(负载平衡,调用之间缺少上下文,应用程序域回收)。编写分布式锁定应用程序协议只是行不通,这条道路铺满了车身。

只是不要这样做。乐观并发在各个方面都好得多。



 类似资料:
  • 问题内容: 不太确定如何措辞这个问题,但是就到这里了。我正在一个项目中,其中多个客户端应用程序正在通过WCF服务访问一个数据源。可能无关紧要,但是WCF服务正在利用实体框架来访问此数据源。每当客户端查询记录以进行编辑时,我都希望在第一个客户端完成更新之前,其他客户端无法编辑该记录。 如果我错了,请纠正我,但我相信这也称为同步和异步数据访问。 我的问题是,实现此功能的行业最佳实践是什么?有没有一种方

  • 我想编写一个 Java EE Web 应用程序,其中不同的用户使用数据库。用户可以开始编辑记录,然后保存更改或取消编辑。当用户进行编辑时,应为其他用户锁定记录。它应该在数据库级别锁定,因为还有其他非Java用户在编辑同一数据库,锁定他们处理的记录。 我了解一些基本的Java数据库,但我不擅长多用户的事情,比如锁定。在互联网上寻找一些例子,在我看来,JavaEE技术的每个“hello world”例

  • 问题内容: 我在我的应用程序中做了一些重复的操作(测试),突然我收到一个奇怪的错误: 我已经重新启动服务器,但是错误仍然存​​在。可能是什么呢? 问题答案: 从Django文档中: SQLite是一个轻量级的数据库,因此不支持高级别的并发性。OperationalError:数据库已锁定错误,表明你的应用程序并发性超过sqlite在默认配置下无法处理的并发性。此错误意味着一个线程或进程在数据库连接

  • 问题内容: 我正在尝试使用Entity Framework Tracing Provider记录生成的SQL语句。 我将上下文类更改为以下内容: 但这不会将SQL语句记录在“输出”窗口中… 我应该在课程中还是在web.config文件中添加更多内容?(我正在研究一个ASP.NET MVC 4项目) 我在以下帖子中使用该解决方案:实体框架4.1-EFTracingProvider 但是我做了一些我不

  • 我遵循grails文档,它说要做悲观锁定,我可以这样做: 所以这会锁定计划实例,直到保存完成。现在在我的例子中,我想一次锁定多个计划,如下所示: 我在默认情况下是事务性的 grails 服务中执行此操作,但上述行没有按预期工作。它不会锁定所有行,并在执行并发事务时引发。 如何在阅读时锁定多行? 有关更多信息,请参见相关问题:grails中的并发事务导致数据库陈旧状态异常

  • 问题内容: 我已经开始在一个拥有数以百计的表和视图的数据库的地方工作,所有这些表和视图都具有隐秘的名称,只有很少的元音,并且没有文档。它们也不允许对数据库架构进行无谓的更改,我也不能触摸任何数据库,除非要在我自己的计算机上进行测试(该数据库会被删除并定期重新创建),因此我无法添加对任何人都有用的注释。 我尝试使用“ Toad”创建一个ER图,但是连续运行48小时后,它仍然看不到任何可见的东西,我需