您的位置:首页 > 数据库 > MySQL

mysql之临时表【整理】

2016-01-17 11:59 615 查看
创建临时表很容易,给正常的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等字段。

以上内容,摘自很多博客,在此谢过。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: