mysql 临时表 cann't reopen解决方案

当你创建临时表的时候,你可以使用temporary关键字。如:


代码如下:

create temporary table tmp_table(name varchar(10) not null,passwd char(6) not null);




代码如下:

create temporary table if not exists sp_output_tmp engine= memory select …from … where ID=current_id;

临时表只在当前连接可见,当这个连接关闭的时候,会自动drop。这就意味着你可以在两个不同的连接里使用相同的临时表名,并且相互不会冲突,或者使用 已经存在的表,但不是临时表的表名。(当这个临时表存在的时候,存在的表被隐藏了,如果临时表被drop,存在的表就可见了)。创建临时表你必须有
create temporary table 权限。
下面几点是临时表的限制
1、临时表只能用在 memory,myisam,merge,或者innodb
2、临时表不支持mysql cluster(簇)
3、在同一个query语句中,你只能查找一次临时表。例如:下面的就不可用


代码如下:

mysql> SELECT * FROM temp_table, temp_table AS t2;
ERROR 1137: Can't reopen table: 'temp_table'

mysql bug地址:http://bugs.mysql.com/bug.php?id=10327
如果在一个存储函数里,你用不同的别名查找一个临时表多次,或者在这个存储函数里用不同的语句查找,这个错误都会发生。
4、show tables 语句不会列举临时表
你不能用rename来重命名一个临时表。但是,你可以alter table代替:


代码如下:

mysql>ALTER TABLE orig_name RENAME new_name;

临时表用完后要记得drop掉:


代码如下:

DROP TEMPORARY TABLE IF EXISTS sp_output_tmp;

(0)

相关推荐

  • MySQL 5.7临时表空间如何玩才能不掉坑里详解

    导读 MySQL 5.7的目标是成为发布以来最安全的MySQL服务器,其在SSL/TLS和全面安全开发方面有一些重要的改变. MySQL 5.7起支持独立临时表空间,但个别时候也可能会踩坑的. MySQL 5.7起,开始采用独立的临时表空间(和独立的undo表空间不是一回事哟),命名ibtmp1文件,初始化12M,且默认无上限. 选项 innodb_temp_data_file_path 可配置临时表空间相关参数. innodb_temp_data_file_path = ibtmp1:12M:

  • MySQL临时表的简单用法介绍

    当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后在这些表运行查询. 创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字: CREATE TEMPORARY TABLE tmp_table ( name VARCHAR(10) NOT NULL, value INTEGER NOT NULL ) 临时表将在你连接MySQL期间存在.当

  • 关于JDBC与MySQL临时表空间的深入解析

    背景 临时表空间用来管理数据库排序操作以及用于存储临时表.中间排序结果等临时对象,相信大家在开发中经常会遇到相关的需求,下面本文将给大家详细JDBC与MySQL临时表空间的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 应用 JDBC 连接参数采用 useCursorFetch=true,查询结果集存放在 mysqld 临时表空间中,导致ibtmp1 文件大小暴增到90多G,耗尽服务器磁盘空间.为了限制临时表空间的大小,设置了: innodb_temp_data_fil

  • MySQL问答系列之什么情况下会用到临时表

    临时表介绍 什么是临时表:MySQL用于存储一些中间结果集的表,临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间.为什么会产生临时表:一般是由于复杂的SQL导致临时表被大量创建 临时表分为两种,一种是内存临时表,一种是磁盘临时表.内存临时表采用的是memory存储引擎,磁盘临时表采用的是myisam存储引擎(磁盘临时表也可以使用innodb存储引擎,通过internal_tmp_disk_storage_engine参数来控制使用哪种存储引擎,从mysql5.7.6之后

  • 解析Mysql临时表及特点

    临时表是当连接没有断开时存在,一旦断开就不会存在,临时表的数据和结构都在内存中,可以做个测验,你创建一个临时表,但是到响应的数据目录下并不会找到.frm文件mysql> CREATE TEMPORARY TABLE tmp_table (    ->    -> name VARCHAR(10) NOT NULL,    -> value INTEGER NOT NULL    ->    -> ) ;Query OK, 0 rows affected (0.38 se

  • MySQL中关于临时表的一些基本使用方法

    临时表可能是非常有用的,在某些情况下,保持临时数据.最重要的是应该知道的临时表是,他们将当前的客户端会话终止时被删除. 临时表中添加MySQL版本3.23.如果您使用的是旧版本的MySQL比3.23,可以不使用临时表,但可以使用堆表. 如前所述临时表将只持续只要的会话是存在的.如果运行一个PHP脚本中的代码,该临时表将被销毁时,会自动执行完脚本后.如果已连接到MySQL数据库的服务器上,通过MySQL的客户端程序的临时表将一直存在,直到关闭客户端或手动破坏的表. 实例 下面是一个例子,使用临时表

  • MySQL两种临时表的用法详解

    外部临时表 通过CREATE TEMPORARY TABLE 创建的临时表,这种临时表称为外部临时表.这种临时表只对当前用户可见,当前会话结束的时候,该临时表会自动关闭.这种临时表的命名与非临时表可以同名(同名后非临时表将对当前会话不可见,直到临时表被删除). 内部临时表 内部临时表是一种特殊轻量级的临时表,用来进行性能优化.这种临时表会被MySQL自动创建并用来存储某些操作的中间结果.这些操作可能包括在优化阶段或者执行阶段.这种内部表对用户来说是不可见的,但是通过EXPLAIN或者SHOW S

  • Mysql临时表原理及创建方法解析

    这篇文章主要介绍了Mysql临时表原理及创建方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 mysql 利用 temporary 关键字就可以创建出一个临时表.创建的这张表会在与服务器的会话终止时自动消失 语法:create temporary table tbl_name...; 规则:每个会话只能看到自己创建的临时表,不同的会话可以创建相同表名称的临时表.临时表的表名可以和永久表的名字相同. 好处:可以利用临时表保存一些临时数据,断

  • mysql 临时表 cann't reopen解决方案

    当你创建临时表的时候,你可以使用temporary关键字.如: 复制代码 代码如下: create temporary table tmp_table(name varchar(10) not null,passwd char(6) not null); 或 复制代码 代码如下: create temporary table if not exists sp_output_tmp engine= memory select -from - where ID=current_id; 临时表只在当前

  • mysql 临时表 cann't reopen解决方案

    当你创建临时表的时候,你可以使用temporary关键字.如: 复制代码 代码如下: create temporary table tmp_table(name varchar(10) not null,passwd char(6) not null); 或 复制代码 代码如下: create temporary table if not exists sp_output_tmp engine= memory select -from - where ID=current_id; 临时表只在当前

  • 浅谈Mysql大数据分页查询解决方案

    目录 1.简介 2.分页插件使用 3.sql测试与分析 3.1 limit现象分析 3.2 解决之道 4 测试时走过的坑 4.1 百万数据内容都一样 4.2 写sql时,把"77"写成了77: 4.3 一个有趣的现象 总结 1.简介 之前,面阿里的时候,有个面试官问我有没有使用过分页查询,我说有,他说分页查询是有问题的,怎么解决:后来这个问题我没有回答出来:本着学习的态度,今天来解决一下这个问题: 2.分页插件使用 1.pom文件 <dependency> <grou

  • 微信昵称带符号导致插入MySQL数据库时出错的解决方案

    Mysql的utf8编码最多3个字节,而Emoji表情或者某些特殊字符是4个字节. 因此会导致带有表情的昵称插入数据库时出错. 只要修改MySQL的编码即可,解决方案如下: 1.在mysql的安装目录下找到my.ini,作如下修改: [mysqld] character-set-server=utf8mb4 [mysql] default-character-set=utf8mb4 2 重启mysql服务 3 修改表 ALTER TABLE 表名 CONVERT TO CHARACTER SET

  • 在CMD中操作mysql数据库出现中文乱码解决方案

    百度了一下..有说将cmd字符编码用chcp命令改为65001(utf8字符编码),可这样之后根本无法输入中文,查询出的中问结果依旧乱码 . 其实,只要保证cmd客户端和MySQL两者编码一致即可. 但现实是cmd默认的是gbk(cmd属性可以看到中文操作系统下面是gbk编码),而mySQL一般是utf8(我的也是),之前一直进入误区,想要更改cmd的字符编码,可是并不能行得通.网友中提到在mysql中关于客户端编码问题,只需在cmd里告诉mysql服务器我客户端这边编码和想要的结果集编码即可.

  • mysql临时表用法分析【查询结果可存在临时表中】

    本文实例讲述了mysql临时表用法.分享给大家供大家参考,具体如下: 一.创建临时表可以将查询结果寄存.报表制作的查询sql中可以用到. (1)关于寄存方式,mysql不支持: select * into tmp from maintenanceprocess (2)可以使用: create table tmp (select ...) 举例: #单个工位检修结果表上部 drop table if EXISTS tmp_单个工位检修结果表(检查报告)上部; create table tmp_单个

  • MySQL无法存储emoji表情解决方案分析

    本文实例讲述了MySQL无法存储emoji表情解决方案.分享给大家供大家参考,具体如下: 今天学习爬虫爬伯乐在线的文章,由于在文章中有emoji表情,导致有emoji表情的文章都爬取不下来 经过一番搜索之后终于解决了问题. 相关文章可参考: ①. MySQL无法存储Emoji表情问题 ②. mysql存emoji表情报错处理 1. 在navicat中 如果在新建表之前就改变数据库的编码,建表的时候好像可以自己转变过来吧 查看字符集编码: show variables like '%char%';

  • MySQL主从复制延迟原因以及解决方案

    来源:公众号「神谕的暗影长廊」 在异步或半同步的复制结构中,从库出现延迟是一件十分正常的事. 虽出现延迟正常,但是否需要关注,则一般是由业务来评估. 如:从库上有需要较高一致性的读业务,并且要求延迟小于某个值,那么则需要关注. 简单概述一下复制逻辑: 1.主库将对数据库实例的变更记录到binlog中. 2.主库会有binlog dump线程实时监测binlog的变更并将这些新的events推给从库(Master has sent all binlog to slave; waiting for

随机推荐