PHP - 访问Oracle表中的锁定行

时间:2013-02-12 16:00:45

标签: php ajax oracle concurrency locking

我有一个Web应用程序需要向PHP页面发送多个Ajax请求(backend.php)

有一个 Oracle 表,假设 T1 有2个int字段 min max (为此例子就够了,实际上它有点复杂了。)

Backend.php需要读取 mix max ,更新这些值(比方说min + = 2,max + = 3),然后返回min和max via一些JSON。

在这种情况下,我无法使用Oracle Sequences(因为在实际应用程序中有N行)。

我想在行上放置锁,以避免不同的Ajax调用从行中读取相同的值。

我尝试运行(通过PHP的OCI)类似SELECT a, b FROM t1 FOR UPDATE SKIP LOCKED但似乎不起作用,2 Ajax调用有时会返回相同的A和B值。

如何让锁工作?有没有更好的办法?谢谢。

1 个答案:

答案 0 :(得分:0)

我不确定你是否需要显式锁定。一个简单的

update T1 set min=min+2, max=max+3 where ...

会自动将锁定放在受影响的行上。

您可能需要花药选择以返回更新的值(或使用PL / SQL中的RETURNING)