版权声明:本文为博主原创文章,未经博主允许不得转载。 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...