简要结论:临时表本身不一定会锁表,但在创建、写入、修改、删除临时表,以及它与其他表(尤其是普通表)发生关联时,仍然可能产生锁;锁的范围和影响取决于数据库类型、存储引擎、隔离级别和操作语句。
下面按常见数据库分别说明。
CREATE TEMPORARY TABLE tmp_xxx ...
mysql 系统表 / 内部元数据中加非常轻量的锁INSERT INTO tmp_xxx SELECT * FROM normal_table;
SELECT 一般只加 MVCC 读锁 / 快照读SELECT * FROM normal_table t1
JOIN tmp_xxx t2 ON t1.id = t2.id;
ALTER TEMPORARY TABLE tmp_xxx ADD COLUMN ...
#tmp:
##tmp:
常见误区场景:
临时表不会“因为自己是临时表”就锁普通表;
但它该加锁的地方一样会加锁,只是范围通常更小、影响更局部。
如果你愿意,可以告诉我:
我可以帮你判断会不会锁、锁哪里、怎么避免。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。