我有一个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值。
如何让锁工作?有没有更好的办法?谢谢。
答案 0 :(得分:0)
我不确定你是否需要显式锁定。一个简单的
update T1 set min=min+2, max=max+3 where ...
会自动将锁定放在受影响的行上。
您可能需要花药选择以返回更新的值(或使用PL / SQL中的RETURNING)