如何分配记录以避免与另一个用户同时更新


how to alloc records to avoid an update at the same time with another user

我正在使用select sql (IBM i上的DB2)从数据库中读取一条记录,并将其显示到用户可以修改和更新的表单中!

现在我需要,如果一个用户正在查看这条记录,在同一时间,另一个用户只能查看但不能更新同一条记录!

我该怎么做?有一种方法来选择此记录分配(或阻塞)的记录,以避免在同一时间更新?(如果有相同的PHP指令也可以这样做)

(例如我使用RPG语言程序,我使用CHAIN指令分配记录以防止此问题)

谢谢!

根据我的经验,如果可能的话,你需要避免走这条路。

是的,可以锁定记录,但是您打算锁定多长时间?如果你的锁定用户在点击"保存"之前花了很长时间吃午饭,会发生什么?

面对你遇到的问题,我会考虑在更新之前对记录进行读检查。如果您发现它已被其他用户更改,您可以将其标记出来或在某些逻辑中工作,仅更改已修改的字段。

如果您控制对表的所有访问,例如一个绿屏应用程序,锁定行可能很有用。如果您不控制所有的访问,例如,其他人有一个web应用程序读取行,或者一个ODBC应用程序读取行,他们可能会因为无法获得所有的行而感到沮丧。一定要考虑该表在所有访问它的应用程序中扮演的更大的角色。

也就是说,DB2 SQL锁定行的方式是FETCH…更新。

如何避免锁定记录读取?

Select * from yourtable
场=‘比较’
跳过锁定数据

还可以检索特定的行数

Select * from yourtable
场=‘比较’
跳过锁定数据
只获取前1行

它适合你吗?

可以在更新数据时锁定表。我不知道如何在DB2上做到这一点,但是您可以在更新数据时锁定表,并在完成后解锁它们。

希望这个链接能帮到你:

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000972.htm