0

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

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

我该怎么做?有没有一种方法可以选择此记录来分配(或阻止)记录以避免同时更新?(如果有相同的 php 指令来做)

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

谢谢!

4

4 回答 4

1

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

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

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

于 2011-09-28T07:40:52.487 回答
1

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

也就是说,锁定行的 DB2 SQL 方法是 FETCH ... FOR UPDATE。

于 2011-09-28T13:42:26.183 回答
0

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

愿此链接可以帮助您:

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

于 2011-09-28T07:32:39.410 回答
0

如何避免锁定记录读取?

Select * from yourtable
where field='comarator'
SKIP LOCKED DATA

您还可以检索特定数量的行

Select * from yourtable
where field='comarator'
SKIP LOCKED DATA
FETCH FIRST 1 ROWS ONLY

它适合你吗?

于 2015-01-31T01:55:19.827 回答