关于锁定数据的问题解决

laogui327 2008-02-27 03:33:54
为了说明白写的比较长,请耐心看完奥,呵呵。
客户端A通过应用程序读取一条数据信息,将数据信息显示在界面上欲进行修改.在A点击修改提交按钮之前,另一客户端B通过同一应用程序只允许查看同一条数据信息,而不允许进行修改操作,防止产生脏数据.
这个问题用sqlserver本身的锁机制是不能解决的,我现在的解决办法是在数据表中加一列表示锁定标识,A在读取数据后,添加锁定标识,在A正常修改数据、或正常退出、或状态过期后进行解锁,保证B不会进行修改操作.但问题是如果A客户端异常中断时,此数据就会产生死锁,虽然可以在服务器端可定时针对这样的数据进行统一解锁,但统一解锁之前这条数据还是处于死锁状态。
请大家说说关于这种数据锁定问题的解决办法。
...全文
197 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimu8130 2008-02-29
  • 打赏
  • 举报
回复
tang的想法楼主已经想过了,可以这样说,这样的锁问题是不能得到良好的解决,可以考虑客户端在使用某条数据的时候每隔5秒就更新一下数据库相应记录的过期时间
tang5399 2008-02-29
  • 打赏
  • 举报
回复
到目前为止这类问题没有完美的解决办法,很简单的例子,客户端断电你怎么感知?
laogui327 2008-02-28
  • 打赏
  • 举报
回复
tang5399 其实你的解决办法和我的是一样的,还是存在缺陷的.
我在地球 2008-02-27
  • 打赏
  • 举报
回复
好像没办法,自己写代码标识来实现吧
jimu8130 2008-02-27
  • 打赏
  • 举报
回复
其实lz你自己有没有考虑一个并发的情况,a和b同时访问未访问的记录了?
tang5399 2008-02-27
  • 打赏
  • 举报
回复
添加一个表temp,
用户A读取向temp里添加一条记录,记录A所访问的表及访问时间
如果此时B也访问A相同表时,因为A已经在temp添加记录了,所以B不向temp添加记录,此时也可以提示B有人在操作
也就是说同一个表在temp表里只有一条记录

A修改或删除时,temp有他的记录则他可以执行,执行后删除temp里记录,在记录删除之前B则无权

设置一个自动过期时间,在此期间A如果有继续访问或执行此表,则更新访问时间,过期则自动删除temp表里记录
此时A,B哪个先访问哪个则获得权限

在sql里添加一个作业定时(比过期时间短一点点)执行,判断temp表,如果当前时间-访问时间大于过期时间,则自动清除此记录(断电时最大等待一个过期时间)
jimu8130 2008-02-27
  • 打赏
  • 举报
回复
简单的方法可以将锁定标识弄成一个时间戳(比如是过期时间或者上次使用时间)
Pig23 2008-02-27
  • 打赏
  • 举报
回复
mssql锁机制是自动的,当然你也可以自己写事务处理
wzy_love_sly 2008-02-27
  • 打赏
  • 举报
回复
不要人工控制锁,控制不了
nyzfl 2008-02-27
  • 打赏
  • 举报
回复
没有好的解决方法
Python编程基础教程本教程旨在帮助初学者了解Python编程的基础知识和高级应用。我们将介绍Python的各个方面,包括基础语法、数据类型、控制结构、函数、文件操作、面向对象编程、模块和包、异常处理、装饰器、生成器、迭代器以及协程。1. Python基础Python是一种解释型、交互式的编程语言。它具有简单易学的语法和丰富的库,使得开发过程既快速又高效。在开始学习Python之前,建议您先熟悉基本的计算机科学概念,例如变量、数据类型、运算符等。2. 数据类型Python具有多种数据类型,包括数字(整数和浮点数)、字符串、布尔值、列表、元组、集合和字典等。这些数据类型在Python中有着广泛的应用,从简单的数值计算到复杂的数据处理。3. 控制结构控制结构是编程中的基本组成部分,它们决定了程序如何执行。Python支持条件语句(if-elif-else)和循环语句(for和while),可以根据程序中的特定条件和情况来选择适当的操作。4. 函数函数是封装一段代码的便捷方式,它们可以在需要时被调用。在Python中,您可以定义函数,并使用参数来传递数据。函数可以返回值,以便在调用它们时使用。5. 文件操作文件操作是编程中常见的任务之一。Python提供了许多内置的函数和方法来进行文件操作,如读取、写入和删除文件等。此外,Python还支持对文件进行高级操作,如读写二进制文件、文件锁定等。6. 面向对象编程面向对象编程是一种流行的编程范式,它使用类和对象的概念来构建复杂的系统。Python支持面向对象编程,您可以使用类来定义对象,并使用继承和多态等特性来扩展和定制对象的行为。7. 模块和包模块和包是Python中组织代码的重要工具。模块是一个包含Python代码的文件,而包则是一个包含多个模块的目录。通过使用模块和包,您可以轻松地组织和管理大型项目中的代码。8. 异常处理异常处理是Python中处理错误的方式之一。当程序中出现错误时,Python会抛出一个异常。通过使用try-except语句块,您可以捕获并处理这些异常,以确保程序的稳定性。9. 装饰器装饰器是Python中的高级功能之一,它允许您在函数或方法之间添加额外的功能,而不改变其原始实现。装饰器是一种强大的工具,可用于实现各种功能,如日志记录、性能分析等。10. 生成器生成器是Python中的一种特殊类型的迭代器。通过使用生成器函数和方法,您可以在需要时生成数据,而不是一次性生成所有数据。这使得生成器在处理大量数据时非常有用,因为它们可以节省内存空间。11. 迭代器和协程迭代器和协程是Python中的两个重要概念。迭代器允许您遍历容器类型的数据结构(如列表和元组),而协程则是一种异步编程的方式,它允许您在程序中执行多个任务并发执行。这两个概念在处理大量数据和高性能应用程序方面非常有用。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧