存储过程
创建一个有返回值存储过程
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...