我有一个web应用程序,它需要向PHP页面(backend.PHP)发送多个Ajax请求
有一个Oracle表,比如说T1,它有两个int字段min和max(对于这个例子来说已经足够了,实际上它有点复杂)。
Backend.php需要读取mix和max,更新这些值(假设min+=2,max+=3),然后通过一些JSON返回min和max。
在这种情况下,我不能使用Oracle序列(因为在实际应用程序中有N行)。
我想在行上加一个锁,以避免不同的Ajax调用从该行读取相同的值。
我尝试运行(通过PHP的OCI)类似SELECT a, b FROM t1 FOR UPDATE SKIP LOCKED
的东西,但似乎不起作用,2 Ajax调用有时会返回相同的A和B值。
如何使锁工作?有更好的方法吗?非常感谢。
我不确定您是否需要显式锁。一个简单的
update T1 set min=min+2, max=max+3 where ...
将自动锁定受影响的行。
您可能需要另一个选择来返回更新的值(或在PL/SQL中使用RETURNING)