Mysql存储函数、游标、临时表简单使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zl_momomo/article/details/82498600

存储过程

创建一个有返回值存储过程

drop TEMPORARY TABLE IF EXISTS contrast;
CREATE PROCEDURE contrast(in x int,in y int,out cnt int)
BEGIN
SET cnt = x + y;
END

使用BEGIN  END 来定义语句块,关键字in表示输入值,out表示输出值

 执行存储函数

call contrast(1,2,@cnt); //执行存储函数
select @cnt; //打印值

游标

我们将数据查询的结果临时保存,并使用游标来逐行读取。类似于循环。

declare parm_avgPrice decimal(10,2);
declare parm_flightNo varchar(50);
-- 遍历数据结束标志
DECLARE done INT DEFAULT FALSE;
-- 定义游标
DECLARE cur CURSOR  FOR select avgPrice,flightNofrom tmp_avgPrice; 
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
open cur;
REPEAT
    -- 将select的值存入局部变量
	FETCH cur INTO parm_avgPrice ,parm_flightNo ;
	IF not done then
         -- 打印数据
        SELECT parm_avgPrice ,parm_flightNo ;
	END IF;
UNTIL done end REPEAT;
-- 关闭游标
close cur;

FETCH cur INTO ... 存入局部变量和数据库字段区分开来(parm_avgPrice , avgPrice)

临时表

临时表只在当前连接可见,断开连接时将删除临时表并释放所有空间

创建临时表 (默认ENGINE=InnoDB)

create TEMPORARY table tmp_avgPrice(
 avgPrice varchar(50),
 flightNo varchar(50)
);

 创建内存临时表(本质:通过ENGINE来指定存储引擎)

create TEMPORARY table tmp_avgPrice(
 avgPrice varchar(50),
 flightNo varchar(50)
) ENGINE=memory;

我们可以把主表的数据批量复制到临时表

insert into tmp_avgPrice(avgPrice,flightNo)
SELECT avg(price) avgPrice ,flightNo FROM `t_test`;

表数据复制
insert into Table2(field1,field2,...) select value1,value2,... from Table1 where...
 

猜你喜欢

转载自blog.csdn.net/zl_momomo/article/details/82498600
今日推荐