业务:第三方回调,同时会 post 多条过来,为防重复插入,加事务表级锁。
假设有表如下:a, b, c
处理函数如下。结果在查表 c 时,报错 1100 Table 'c' was not locked with LOCK TABLES,事务不是在 fun2 里就已经处理完毕了吗,为何还会出现这个提示?
function fun() { if (xxx) { fun2(); } // 查表 c $db->query("select * from c"); } // 事务查询,表级锁 function fun2() { $db->startTrans(); $db->execute("LOCK TABLE a WRITE, b WRITE, c READ;"); $db->query("select * from a"); $db->query("select * from b"); $db->execute("update a set name = 'xx' where ..."); $db->commit(); $db->execute("UNLOCK TABLES;"); } 