我正在使用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