对不起,我的英语不好。我最近接触了 Visual C# 编程,但我不是专家级的程序员。在这个简短的介绍之后,重要的是我需要在编辑操作期间对记录进行管理竞赛。这意味着同时使用该软件的两台计算机,第一台开始编辑记录的计算机必须“锁定”该记录,因此在程序的第二个实例中,何时以及如果尝试更改同一记录,将显示一条标准消息并中断该过程。我实际上使用 MySQL DBMS,我唯一能做的就是用“START TRANSACTION”锁定记录,直到我提交或关闭连接。问题是我不 不知道如何检查是否有活动事务或某种阻塞来停止过程,这意味着程序的第二个实例完全被阻塞,直到他们从第一个实例释放记录。解决方案?感谢您的关注。
问问题
70 次
1 回答
0
好吧,一般来说,在用户处理记录时物理锁定记录是一个糟糕的设计。数据库锁应该很短。在开始事务和提交事务之间应该只有代码执行,但绝对没有用户交互。
您可以谷歌“乐观锁定与悲观锁定”以了解有关该主题的更多信息。
如果你必须使用悲观锁,你将不得不实现某种智能软件锁而不是数据库锁。例如,您可以为 Current_Edit_By 和 Current_Edit_Time 添加两个字段。当用户开始编辑记录时,您使用用户 ID 和当前日期时间填写这些字段。当另一个用户尝试编辑同一记录时,您检查这两个字段,如果那里有值,则显示错误。
当然,如果用户在未提交记录的情况下从数据库断开连接,您将需要实现自动清除锁定记录的机制。因此,日期时间字段(例如,只要连接不再存在,就可以清除超过 30 分钟的锁)。
于 2012-11-24T19:10:34.827 回答