我使用select sql(IBM i上的DB2)从数据库读取记录并将其显示到用户可以修改和更新它的表单中!如何分配记录以避免与其他用户同时进行更新
现在我需要,如果用户正在查看此记录,同时另一个用户只能查看,但不能更新相同的racord!
我该怎么办? ther是一种选择分配(或阻止)记录以避免同时更新的记录的方法吗? (也如果有相同的PHP指令去做)
(例如我用RPG语言程序工作在这里我使用的Alloc记录链的指令,以防止这个问题)
的感谢!
我使用select sql(IBM i上的DB2)从数据库读取记录并将其显示到用户可以修改和更新它的表单中!如何分配记录以避免与其他用户同时进行更新
现在我需要,如果用户正在查看此记录,同时另一个用户只能查看,但不能更新相同的racord!
我该怎么办? ther是一种选择分配(或阻止)记录以避免同时更新的记录的方法吗? (也如果有相同的PHP指令去做)
(例如我用RPG语言程序工作在这里我使用的Alloc记录链的指令,以防止这个问题)
的感谢!
以我的经验,你需要避免走这路线,如果你所能。
是的,可以锁定记录,但你打算锁定多久?如果您的锁定用户在点击“保存”前长时间吃午饭,会发生什么情况?
面对您遇到的问题,我会考虑在更新之前对记录进行读取检查。如果您发现它已被其他用户更改,您可以将其标记或以某种逻辑工作,以仅更改已修改的字段。
是的,您可以在更新数据时锁定表格。我不知道你怎么能在DB2上做到这一点,但是你可以在更新数据时锁定表格,并在完成后解锁它们。
可能这个链接可以帮助你:
如果您控制对表格的所有访问权限(例如绿屏应用程序),锁定行可能很有用。如果您不控制所有访问,例如其他人拥有读取行的Web应用程序,或者ODBC应用程序读取行,则可能会因无法获取所有行而感到沮丧。绝对考虑表格在所有访问它的应用程序中扮演的角色。
也就是说,DB2 SQL锁定行的方式是FETCH ... FOR UPDATE。
如何避免锁定记录读取?
SELECT * FROM yourtable
where字段= '比较'
SKIP LOCKED DATA
你也可以检索特定的行数
SELECT * FROM yourtable
where字段= '比较'
跳过锁定数据
仅提取第1行
它适合您吗?
感谢您的意见!如何检查记录是否已更改?日期和时间? –
要真正回答这个问题,我们需要更多关于问题的背景细节。你可以通过触发器来实现LastUpdateDate,这可能会有所帮助。但是,触发器通常要避免。 –
或者,首先确保任何事务已提交,然后在记录上执行另一个* select *,比较您关注的字段,然后执行更新。然而,在你做这件事之前,请仔细考虑你真正拥有的并发问题。例如,一个用户是否可能会将客户的姓名从“Jones”改为“Smith”,而另一个用户的姓名是否会将其更改为“Brown”?可能不会,作为开发者,你可能会决定这样的行为不是你的问题。这取决于你正在开发什么样的应用程序。 –