MySql 临时表
今天在项目中遇到一个,当mysql的in语句中数据量很大时,建立一个临时表的例子。于是楼主整理了一下关于临时表的知识,与大家分享一下~
首先,临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。因此在不同的连接中可以创建同名的临时表,并且操作属于本连接的临时表。
建立临时表:
CREATE TEMPORARY TABLE temp_table ( id VARCHAR(32) NOT NULL, NAME VARCHAR(100) ) ENGINE = MEMORY
注意最后面的ENGINE = MEMORY,其中ENGINE是数据库引擎,常用的几种类型为MyISAM、MEMORY、InnoDB(默认)
1)MyISAM 管理非事物表。提供高速存储和检索,以及全文搜索能力
2)MEMORY存储引擎提供“内存中”表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表
注释:MEMORY存储引擎正式地被确定为HEAP引擎。
3)InnoDB和存储引擎提供事务安全表。
当然还有一种简单粗暴的方式建立临时表,直接将查询结果导入到临时表:
CREATE TEMPORARY TABLE temp_table ENGINE = MEMORY SELECT * FROM `bm_sc_settlement`
创建临时表后,我们插入数据:
INSERT INTO temp_table VALUES('1', 'a'); INSERT INTO temp_table VALUES('2', 'b'); INSERT INTO temp_table VALUES('3', 'c'); INSERT INTO temp_table VALUES('4', 'd'); INSERT INTO temp_table VALUES('5', 'e');
查询:
SELECT * FROM temp_table;
可以看到我们插入的结果已经放到临时表中(也可以做更新及删除操作)
此时当我们关掉mysql客户端(楼主用的SQLyog),然后重新打开。执行查询临时表操作,会提示找不到该临时表
删除临时表:
DROP TEMPORARY TABLE IF EXISTS temp_table;
临时表使用有一些限制条件:
1)在同一个query语句中,相同的临时表只能出现一次。如:
SELECT * FROM temp_table a ,temp_table b;
错误信息:ERROR 1137 (HY000): Can't reopen table: 'temp_table'
同样相同临时表不能在存储函数中出现多次,如果在一个存储函数里,用不同的别名查找一个临时表多次,或者在这个存储函数里用不同的语句查找,都会出现这个错误。
2) 不同的临时表可以出现在同一个query语句中,如临时表temp_tb1, temp_tb2:
select * from temp_tb1, temp_tb2;
3)可以复制临时表得到一个新的临时表,如:
create temporary table new_table select * from old_table;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了