业务:第三方回调,同时会 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;");
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.