简短结论:数据库“自连接(self join)”本身不会额外导致锁表;是否锁表,取决于你执行的 SQL 类型、隔离级别、存储引擎和访问的数据范围,而不是“是不是自连接”。
下面分点说明。
自连接只是:
SELECT a.id, b.id
FROM emp a
JOIN emp b ON a.manager_id = b.id;
数据库优化器看来,它和 emp JOIN emp 没区别,不会因为是同一张表就特殊加锁。
SELECT(普通查询)
SELECT 使用多版本机制UPDATE emp a
JOIN emp b ON a.manager_id = b.id
SET a.salary = b.salary;
SELECT * FROM emp a, emp b FOR UPDATE;
FOR UPDATE 导致的❌ “自连接 = 锁表”
✅ “自连接 + 写 / 显式锁 / 低并发控制 = 可能锁”
JOIN 字段有索引如果你用的是 具体数据库(MySQL / Oracle / PG)+ 场景(查询 or 更新),我可以给你更精确的锁行为分析。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。