You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL LOCK TABLE后关联查询失效:单表正常联表异常

MySQL表锁问题:为什么关联查询在锁表后无法执行?

嘿,这个问题其实是踩了MySQL表锁的一个关键规则坑,咱们一步步拆解来看:

首先看你能正常执行的代码:

$this->db->query('LOCK TABLE user READ');
$this->db->query('select * from user');
$this->db->query('UNLOCK TABLES');

这段没问题是因为你只锁定了user表,查询也只涉及这一张表,完全符合表锁的访问规则。

再看出问题的这段:

$this->db->query('LOCK TABLE company READ');
$this->db->query('select * from user as a join company as b on a.id=b.id where a.id = 1');
$this->db->query('UNLOCK TABLES');

问题根源

MySQL的表锁机制有个严格要求:当你执行LOCK TABLES命令后,当前会话只能访问被显式锁定的表。

你这里只锁了company表,但查询里同时用到了user和company两张表——user表没被锁定,所以MySQL会直接拒绝这个查询请求,导致代码无法正常工作。

修复方案

把查询涉及的所有表都加上读锁就行,修改锁表语句为:

LOCK TABLE user READ, company READ;

这样你的关联查询就能正常执行了,因为当前会话已经获得了两张表的读权限。

内容的提问来源于stack exchange,提问作者crazyday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:23:05