当前位置:数据库 > 数据库管理> 正文

mysql 临时表

时间:2014-10-5类别:数据库

mysql 临时表

mysql 临时表

一、创建临时表

可以使用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;

 

二、临时表的特性

 

1、只有在当前连接情况下, TEMPORARY 表才是可见的。当连接关闭时, TEMPORARY 表被自动取消。这意味着两个不同的连接可以使用相同的临时表名称,同时两个临时表不会互相冲突,也不与原有的同名的非临时表冲突。(原有的表被隐藏,直到临时表被取消时为止。)必须拥有 CREATE TEMPORARY TABLES 权限,才能创建临时表。可以通过指定 ENGINE|TYPE = MEMORY; 来指定创建内存临时表。

 

2、如果表已存在,则使用关键词 IF NOT EXISTS 可以防止发生错误。注意,原有表的结构与 CREATE TABLE 语句中表示的表的结构是否相同,这一点没有验证。注释:如果在 CREATE TABLE...SELECT 语句中使用 IF NOT EXISTS ,则不论表是否已存在,由 SELECT 部分选择的记录都会被插入。

 

3、临时表只能用在 memory,myisam,merge,或者innodb

 

4、临时表不支持mysql cluster(簇)

 

5、在同一个query语句中,你只能查找一次临时表,如果在一个存储函数里,你用不同的别名查找一个临时表多次,或者在这个存储函数里用不同的语句查找,这个错误都会发生。

 

6、show tables 语句不会列举临时表

 

7、你不能用rename来重命名一个临时表。但是,你可以alter table代替:

mysql>ALTER TABLE orig_name RENAME new_name;

 

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

mysql>DROP TEMPORARY TABLE IF EXISTS sp_output_tmp;

 

9、DROP TEMPORARY TABLE 语句只取消 TEMPORARY 表,语句不会终止正在进行中的事务。在采用连接池的情况下,为防止多次 CREATE 、 DROP TEMPORARY TABLE 带来的性能瓶颈,可以使用 CREATE IF NOT EXISTS + TRUNCATE TABLE 的方式来提升性能。

 

 

三、mysql 临时表实例

 

  •  
  • SQL 代码   复制
  • 
    CREATE PROCEDURE sp_test_tt(IN i_chars VARCHAR(50),OUT o_counts BIGINT)
    BEGIN
             create temporary table if not exists tmpTable – 不存在则创建临时表
             (
               objChk varchar(255) primary key,
               ModelName varchar(50),
               Operator varchar(500),
               PModelName varchar(50)
             );
             truncate TABLE tmpTable;  -- 使用前先清空临时表。
     
             insert into tmpTable values(i_chars,i_chars,i_chars,i_chars);
             insert into tmpTable values(i_chars,i_chars,i_chars,i_chars); -- 语句1
             select * from tmpTable; -- 语句2
             select count(*) into o_counts from tmpTable; -- 语句3
    END;
    
    		
  •  

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐