只为成功找方向,不为失败找借口

每天都不能停止前进的脚步
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

mysql存储过程----临时表 temporary

Posted on 2018-05-17 11:26  冰碟  阅读(2900)  评论(0编辑  收藏  举报

在存储过程中可以使用临时表,下面有一个分割字符串的例子

语法

1.创建:create temporary table 表名(列信息);

2.删除:drop table 表名;

  3.清空:truncate table 表名;

注意:

1.在mysql中,临时表一但建立,销毁的条件是session中断,所以为了避免创建过程中出现“table 'XX' already exists”的错误,将建表语句改为CREATE TEMPORARY TABLE if not exists 表名(列信息);

2.临时表只有在用户退出连接时(session中断)时,清空数据,不然数据一直累积,若有需求,需要在临时表使用之后清空临时表

 

例子

一个和java的spilt作用相似存储过程

 

在存储过程中可以使用临时表,下面有一个分割字符串的例子

语法

1.创建:create temporary table 表名(列信息);

2.删除:drop table 表名;

  3.清空:truncate table 表名;

注意:

1.在mysql中,临时表一但建立,销毁的条件是session中断,所以为了避免创建过程中出现“table 'XX' already exists”的错误,将建表语句改为CREATE TEMPORARY TABLE if not exists 表名(列信息);

2.临时表只有在用户退出连接时(session中断)时,清空数据,不然数据一直累积,若有需求,需要在临时表使用之后清空临时表



例子

一个和java的spilt作用相似存储过程


CREATE DEFINER=`root`@`%` PROCEDURE `str_spilt`(IN `str` varchar(2000))  
BEGIN  
    #分割字符串  
    set @i=0;  
    CREATE TEMPORARY TABLE if not exists str_spilt_result(id BIGINT(20) NOT NULL);   
    truncate table str_spilt_result;  
    SET @cnt = 1+(LENGTH(str) - LENGTH(REPLACE(str,',','')));  
    WHILE @i < @cnt DO  
        SET @i = @i + 1;  
        SET @result = REVERSE(SUBSTRING_INDEX(REVERSE(SUBSTRING_INDEX(str,',',@i)),',',1));  
        INSERT INTO str_spilt_result(id) VALUES (@result);  
    END WHILE;  
    SELECT * from str_spilt_result;  
END