创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:
CREATE TEMPORARY TABLE tmp_table (name VARCHAR(10) NOT NULL,value INTEGER NOT NULL)
这就意味着你可以在两个不同的连接里使用相同的临时表名,并且相互不会冲突,或者使用已经存在的表,但不是临时表的表名。
(当这个临时表存在的时候,存在的表被隐藏了,如果临时表被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;
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等字段。
以上内容,摘自很多博客,在此谢过。。。