如何管理记录之间的竞争?

时间:2012-11-24 18:37:11

标签: c# mysql transactions record database

抱歉我的英语不好。我最近接近使用Visual C#进行编程,并且不是专家程序员。在这个简短的介绍之后,我需要在编辑操作期间在记录上实施管理竞赛。这意味着使用该软件同时拥有两台计算机,第一台开始编辑记录的软件必须“锁定”记录,以便在程序的第二个实例中尝试更改同一记录时,将显示标准消息并中断该过程。 我实际上使用MySQL DBMS,我唯一能做的就是用“START TRANSACTION”锁定记录,直到我执行或关闭连接。问题是我不知道如何检查是否存在活动事务或某种块来停止该过程,这意味着程序的第二个实例被完全阻止,直到它们从第一个实例释放记录。解决方案?谢谢你的关注。

1 个答案:

答案 0 :(得分:0)

嗯,一般来说,在用户处理记录时物理锁定记录是一个糟糕的设计。数据库锁应该很短。在启动事务和提交事务之间应该只执行代码,但绝对没有用户交互。

您可以谷歌“乐观锁定与悲观锁定”来了解有关该主题的更多信息。

如果必须使用悲观锁定,则必须实现某种智能软件锁而不是数据库锁。例如,您可以为Current_Edit_By和Current_Edit_Time添加两个字段。当用户开始编辑记录时,您可以使用用户ID和当前日期时间填写这些字段。当另一个用户尝试编辑同一条记录时,检查这两个字段,如果有值,则显示错误。

当然,如果用户在未提交记录的情况下断开与数据库的连接,则需要实现一种自动清除锁定记录的机制。因此,日期时间字段(例如,清除超过30分钟的锁定,只要连接不再存在)。