业务:第三方回调,同时会 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;");
}