mysql之临时表【整理】

创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:

CREATE TEMPORARY TABLE tmp_table  (name VARCHAR(10) NOT NULL,value INTEGER NOT NULL)

create temporary table tmp_table (   name varchar(10) not null,   value integer not null   ) type = heap

临时表只在当前连接可见,当这个连接关闭的时候,会自动drop。
这就意味着你可以在两个不同的连接里使用相同的临时表名,并且相互不会冲突,或者使用已经存在的表,但不是临时表的表名。
(当这个临时表存在的时候,存在的表被隐藏了,如果临时表被drop,存在的表就可见了)。

临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。
当然你可以在仍然连接的时候删除表并释放空间。DROP TABLE tmp_table

频繁的创建和删除临时表,mysql需要频繁的处理打开和关闭表描述符。
建议 drop table 改成 truncate table,把临时表清空了,也就不会担心下一次调用时临时表不为空了,省去了频繁的处理表文件描述符。

下面几点是临时表的限制:
 临时表只能用在 memory,myisam,merge,或者innodb
 临时表不支持mysql cluster(簇)
 在同一个query语句中,你只能查找一次临时表。

你不能用rename来重命名一个临时表。但是,你可以alter table代替:
ALTER TABLE orig_name RENAME new_name;
show tables 语句不会列举临时表;
临时表用完后要记得drop掉:
DROP TEMPORARY TABLE IF EXISTS sp_output_tmp;

1、临时表再断开于mysql的连接后系统会自动删除临时表中的数据,但是这只限于用下面语句建立的表:
 1)定义字段
  CREATE TEMPORARY TABLE tmp_table ( 
      name VARCHAR(10) NOT NULL, 
      value INTEGER NOT NULL 
  )
 2)直接将查询结果导入临时表
  CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name;
  Create TEMPORARY table TempTable (Select user_id,user_name From tb_user);

2、另外mysql也允许你在内存中直接创建临时表,因为是在内存中所有速度会很快,语法如下:
  CREATE TEMPORARY TABLE tmp_table ( 
     name VARCHAR(10) NOT NULL, 
     value INTEGER NOT NULL 
  ) TYPE = HEAP 

内存表会把表结构存放在磁盘上,把数据放在内存中。
临时表和内存表的ENGINE不同,临时表默认的是MyISAM,而内存表是MEMORY .

完整实例:

    DROP TEMPORARY TABLE IF EXISTS userinfo_tmp;
 
    CREATE TEMPORARY TABLE userinfo_tmp(
        i_userid int,
        v_username varchar(30)
    ) ENGINE = MEMORY;
 
    insert into userinfo_tmp(i_userid,v_username) 
    select i_userid,v_username
    from userinfo
    where i_userid>1000 and i_userid<8000;
 
    select * from userinfo_tmp;
     
    DROP TEMPORARY TABLE IF EXISTS userinfo_tmp;


 内存表:
1. 参数控制:max_heap_table_size
2. 到达上线后报错。
3. 表定义保存在磁盘上,数据和索引保存在内存里面。
4. 不能包含TEXT,BLOB等字段。
临时表:
1. 参数控制:tmp_table_size。
2. 到达上线后创建文件在磁盘上。
3. 表定义和数据都在内存里。
4. 可以包含TEXT, BLOB等字段。

以上内容,摘自很多博客,在此谢过。。。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值