Editing database records by multiple users我已经设计了数据库表(在MS SQL服务器上已规范化),并为应用程序创建了一个独立的Windows前端,少数用户将使用该窗口来添加和编辑信息。我们将添加一个网络界面,以便以后在整个生产区域进行搜索。 我担心如果两个用户开始编辑同一记录,那么最后提交更新的用户将是"赢家",并且重要的信息可能会丢失。我想到了许多解决方案,但是我不确定是否会造成更大的麻烦。 有没有更好的解决方案,或者我应该选择其中一种? 如果您希望不经常发生冲突,那么乐观并发可能是您最好的选择。
Scott Mitchell撰写了有关实现该模式的综合教程: 经典方法如下:
-first创建字段(更新时间)以存储最新更新记录 SELECT FOR UPDATE和等效项很不错,只要您在微观时间内保持该锁定,但是对于宏观而言(例如,用户已加载数据且未按"保存",则应如上所述使用开放式并发。)我一直认为自己的名字是错误的-比"最后一位作家获胜"更为悲观,后者通常是唯一考虑的其他选择。) 另一个选择是测试要更改的记录中的值是否与开始时的值相同:
(显示customer_nm字段,用户进行更改)
您不必在表中添加新列(并保持其最新状态),但是您必须创建更多详细的SQL语句并将新字段和旧字段传递给存储过程。 它还具有您不锁定记录的优点-因为我们都知道,当不应该使用记录时,记录最终将保持锁定状态。
@ Mark Harrison:SQL Server不支持该语法(
SQL Server等效项是 有关更多信息,请参见SQL Server联机丛书。
和我在一起,最好的方法是我有一个列lastupdate(时间戳数据类型)。 数据库将为您执行此操作。看" select ... for update",它是专门为这种事情而设计的。它将为您提供对所选行的写锁定,然后您可以提交或回滚。 |