MySQL 临时表详细说明

目录

MySQL 临时表详细说明

1. 定义

2. 核心特性

3. 创建与使用

4. 典型应用场景

5. 生命周期管理

6. 注意事项

7. 性能优化建议


MySQL 临时表详细说明

1. 定义

临时表是存储在内存或磁盘上的临时性数据表,仅在当前数据库会话中存在。会话结束时自动销毁,适合存储中间计算结果或临时数据集。其名称以#开头(如#TempTable)。

2. 核心特性
  • 会话隔离性:每个会话独立维护自己的临时表,互不可见。
  • 自动清理:会话结束(连接断开)时自动删除。
  • 存储位置
    • 内存引擎(如MEMORY):小数据量时高效
    • 磁盘存储(默认):数据量大时自动切换
  • 作用域
    • 局部临时表(#前缀):仅当前会话可见
    • 全局临时表(##前缀):所有会话可见,但会话结束后自动删除
3. 创建与使用

创建语法

-- 局部临时表
CREATE TEMPORARY TABLE #EmployeeTemp (id INT PRIMARY KEY,name VARCHAR(50),salary DECIMAL(10,2)
);-- 全局临时表
CREATE TEMPORARY TABLE ##GlobalTemp (log_id INT,message TEXT
);

数据操作

-- 插入数据
INSERT INTO #EmployeeTemp VALUES (1, '张三', 8500.00);-- 查询
SELECT * FROM #EmployeeTemp WHERE salary > 8000;-- 关联其他表
SELECT e.name, d.department 
FROM #EmployeeTemp e
JOIN departments d ON e.dept_id = d.id;

4. 典型应用场景
  • 复杂查询优化:存储子查询结果,避免重复计算
    CREATE TEMPORARY TABLE #HighSalary 
    SELECT * FROM employees WHERE salary > 10000;SELECT d.name, COUNT(*) 
    FROM #HighSalary h
    JOIN departments d ON h.dept_id = d.id
    GROUP BY d.name;
    

  • 批量数据处理:ETL过程中的临时存储
  • 会话级缓存:存储用户会话的中间状态(如购物车数据)
  • 递归查询:实现层次结构遍历
    WITH RECURSIVE cte AS (SELECT id, parent_id FROM categories WHERE parent_id IS NULLUNION ALLSELECT c.id, c.parent_id FROM categories cJOIN cte ON c.parent_id = cte.id
    )
    SELECT * INTO #Hierarchy FROM cte;  -- 存储递归结果
    

5. 生命周期管理
阶段行为
创建CREATE TEMPORARY TABLE 执行时生成
会话活跃期可正常读写,支持索引、触发器等对象
会话结束自动删除表结构及数据
异常中断连接意外断开时由MySQL自动清理
6. 注意事项
  • 命名冲突:避免与持久表同名,临时表优先级更高
  • 事务行为
    • 未提交事务中创建的临时表,回滚时不会删除
    • 数据修改操作(INSERT/UPDATE)可回滚
  • 复制环境
    • 主从复制中,临时表操作不写入二进制日志(binlog)
    • 级联删除场景需显式处理外键约束
  • 内存限制
    • 超过tmp_table_size(默认16MB)时转为磁盘存储
    • 监控语句:SHOW STATUS LIKE 'Created_tmp%';
  • 连接池影响:连接复用可能导致临时表残留,需显式DROP TEMPORARY TABLE
7. 性能优化建议
  1. 索引策略
    CREATE INDEX idx_salary ON #EmployeeTemp(salary);  -- 临时表索引
    

  2. 控制规模:仅保留必要字段,避免SELECT * INTO
  3. 替代方案
    • 简单查询优先使用子查询或CTE(公共表表达式)
    • 频繁使用考虑内存表(ENGINE=MEMORY

最佳实践:在存储过程中使用临时表后显式删除,避免长期连接的内存累积:

DROP TEMPORARY TABLE IF EXISTS #EmployeeTemp;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92603.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92603.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析 Apache APISIX 在微服务网关中的性能优化实践指南

深入解析 Apache APISIX 在微服务网关中的性能优化实践指南 文章类型:性能优化实践指南 技术领域:微服务架构 —— API 网关 文章结构:原理深度解析型 目标读者:有一定微服务与运维基础的后端开发工程师一、技术背景与应用场景 随…

【Spring Boot刷新上下文核心流程详解】

Spring Boot 刷新上下文核心流程详解 一、前言 在使用 Spring Boot 启动应用时,控制台会打印出一大串日志,其中最核心的启动动作之一就是 刷新上下文(refresh)。 refresh 方法不仅负责 Bean 的创建与初始化,还涉及监…

关于过滤器(Filter)的学习

过滤器(Filter)概述 过滤器是 Java Servlet 规范的一部分,用于在请求到达 Servlet 之前或响应返回客户端之前拦截请求和响应。它可以用于执行各种任务,如请求预处理、响应后处理、身份验证、日志记录等。 过滤器的作用 预处理请…

Spring AI 打造智能面试人实战

Spring AI人工智能面试机器人相关实例 以下是与Spring AI人工智能面试机器人相关的实用案例,涵盖技术实现、功能设计及常见问题解决方案,按应用场景分类呈现: 技术集成案例 调用Hugging Face模型库处理专业领域问题 通过Spring Security添加面试会话身份验证 结合WebSoc…

QT 程序发布时候调用自定义动态库

1、需要在pro文件中增加下面的内容:QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN\" QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN/lib\" QMAKE_LFLAGS "-Wl,-rpath,\\$$ORIGIN/../lib\"其中lib为动态库的文件夹名称,可以根据自己喜好…

SpringBoot学习日记 Day6:解锁微服务与高效任务处理

一、开篇:从单体到微服务的思维转变刚开始接触微服务时,我总习惯把所有功能写在一个项目里。直到项目越来越臃肿,每次修改都要全量部署,才意识到微服务架构的价值。今天我们就来探索SpringBoot在微服务场景下的强大能力&#xff0…

机械学习--DBSCAN 算法(附实战案例)

DBSCAN 算法详解DBSCAN(Density-Based Spatial Clustering of Applications with Noise,带噪声的基于密度的空间聚类应用)是一种经典的密度聚类算法,由 Martin Ester 等人于 1996 年提出。与 K-means 等基于距离的聚类算法不同&am…

【昇腾】基于RK3588 arm架构Ubuntu22.04系统上适配Atlas 200I A2加速模块安装EP模式下的驱动固件包_20250808

一、背景 1.1 主要的硬件是:1.2 主要的软件是: RK3588跑操作系统Atlas 200I A2加速模块作为EP模式关键参数版本说明CPU架构aarch64OS版本Ubuntu 22.04.5 LTSkernel版本5.10.198 二、适配 准备固件run包文件:Ascend-hdk-310b-npu-firmware_7.…

如何在 VS Code 中进行 `cherry-pick`

cherry-pick 是 Git 的一个功能,允许你选择某个 commit 并将其应用到当前分支,而无需合并整个分支。在 VS Code 中,你可以通过 内置的 Git 功能 或 终端 来完成 cherry-pick。方法 1:使用 VS Code 的 Git 图形界面(GUI…

STM32CubeMX(十三)FatFs文件系统(SPI驱动W25Qxx)

目录 一、知识点 1. 什么是Fatfs文件系统? 2. Fatfs操作系统控制流程 二、实战操作 1.CubeMX配置 2. 配置串口以及SPI 3. 修改功能映射接口 4. 添加测试代码 5. 实验现象 在完成本章之前需要完成一些基础配置,详情查看下面的文章。 STM32CubeMX(二)新建工…

【前端后端部署】将前后端项目部署到云服务器

更多笔记在这里☞ 全栈之路: https://gitee.com/oldbe/notes 【跳转到】 觉得有用请点个 star ,非常感谢! 现在AI太强大,开发个人产品的门槛和成本太低了,只要你有好的想法都可以很快速的开发一款产品 1.…

vue如何监听localstorage

在Vue中监听localStorage的变化可以通过几种方式实现,但需要注意的是,localStorage本身不提供原生的事件监听机制,如DOM元素的MutationObserver。不过,你可以通过一些间接的方法来监听localStorage的变化。方法1:使用w…

灰狼算法+四模型对比!GWO-CNN-LSTM-Attention系列四模型多变量时序预测

摘要:聚划算!大对比!灰狼算法四模型对比!GWO-CNN-LSTM-Attention系列四模型多变量时序预测,该代码特别适合需要横向对比不同深度学习模型性能的时序预测场景,研究者可通过参数快速适配不同预测需求&#xf…

冒泡排序实现以及优化

一,冒泡排序说明冒泡排序是从第一个元素开始和后面一个元素进行判断是否满足左小右大,如果不满足就交换位置,再拿第二个和第三个进行上述操作一直到第n-1和第n个。经过上述的一轮操作就可以把第一个最大值放到最右边,在进行n轮上述…

水下管道巡检机器人cad【10张】三维图+设计说明书

摘 要 水下管道是水下油气管道的生命线,水下管道巡检机器人可以替代人工完成水下油气管道状态的实时监测和数据反馈,有助于工作人员对水下油气管道的运行情况实时掌握。 本文完成了水下管道巡检机器人的总体设计,采用三维设计软件Solidwor…

SQL(结构化查询语言)的四大核心分类

这张图展示了 SQL(结构化查询语言)的四大核心分类,分别对应不同的数据库操作场景。以下是逐类解析:1. 数据操作语言(DML:Data Manipulation Language)作用:用于操作数据库中的数据&a…

AI(1)-神经网络(正向传播与反向传播)

🍋🍋AI学习🍋🍋🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主…

嵌入式Linux学习 - 数据结构6

五、哈希表1. 哈希算法将数据通过哈希算法映射成一个键值,存取都在同一位置实现数据的高效存储和查找将时间复杂度尽可能降低至O(1)2. 哈希碰撞多个数据通过哈希算法得到的键值相同,称为产生哈希碰撞3. 哈希表构建哈希表存放0-100之间的数据将0 - 100之间…

GitHub 趋势日报 (2025年08月07日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图1894nautilus_trader354stagehand315openai-cookbook263sim242ollama230prisma154v…

android 使用openimagelib OpenImage 实现点击放大图片,浏览

在 Android 中使用 OpenImageLib(假设这是一个开源图片加载库,类似于 Glide 或 Picasso)实现 点击放大图片并浏览 的功能,通常需要结合 图片查看器库(如 PhotoView)和 图片加载库(如 OpenImageLib)。以下是完整的实现方案: 1. 添加依赖 (1) 添加 OpenImageLib 依赖 …