MySQL 存储过程中使用游标中使用临时表可以代替函数效果

电脑杂谈  发布时间:2019-08-21 00:03:59  来源:网络整理

mysql 结果集 存储过程 存储_mysql存储过程参数类型_mysql存储过程临时表实例

MySQL不支持下标。但有时候需要组合几张表的数据,在储存过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的个别字段的组合计算,MySQL临时表可以缓解这个弊端.临时表:只有在当前连接状况下, TEMPORARY 表才是可见的。当连接关掉时,TEMPORARY 表被手动更改。必须拥有 create temporary table 权限mysql存储过程临时表实例mysql存储过程临时表实例,才能建立临时表。可以借助指定 engine = memory; 来指定创建存储临时表。

先搭建要用的数据表及数据:

drop table if exists person;

create table `person` (

`id` int(11)primary key NOT NULL DEFAULT '0',

`age` int(11) DEFAULT NULL,

`name` varchar(225) not null

) engine=innodb default charset=utf8;

insert into person values(1,1,'zhangshan'),(2,2,'lisi'),(3,3,'lst'),(4,4,'jon'),(5,5,'test');

mysql存储过程参数类型_mysql存储过程临时表实例_mysql 结果集 存储过程 存储

临时表支持外键、索引指定。在连接非临时表查询可以借助指定字段或键值来降低性能。存储过程语句及游标和临时表综合例子:

drop procedure if exists sp_test_tt; -- 判断内存过程变量能否存在如果是删除

delimiter ;;

create procedure sp_test_tt()

begin

create temporary table if not exists tmp -- 如果表已存在,则使用关键词 if not exists 可以避免出现出错

(

id varchar(255) ,

name varchar(50),

mysql 结果集 存储过程 存储_mysql存储过程临时表实例_mysql存储过程参数类型

age varchar(500)

) engine = memory;

begin

declare ids int; -- 接受查询数组

declare names varchar(225); -- 接受查询数组

declare done int default false; -- 跳出标识

declare ages int(11); -- 接受查询数组

declare cur cursor for select id from person; -- 声明游标

declare continue handler for not FOUND set done = true; -- 循环结束设定跳出标识

mysql存储过程参数类型_mysql 结果集 存储过程 存储_mysql存储过程临时表实例

open cur; -- 开始游标

LOOP_LABLE:loop -- 循环

FETCH cur INTO ids;

select name into names from person where id=ids;

select age into ages from person where id=ids;

insert into tmp(id,name,age) value(ids,names,ages);

if done THEN -- 判断能否继续循环如果done等于true离开循环

LEAVE LOOP_LABLE; -- 离开循环

END IF;

mysql存储过程参数类型_mysql 结果集 存储过程 存储_mysql存储过程临时表实例

end LOOP; -- 结束循环

CLOSE cur; -- 关闭游标

select * from tmp; -- 查询临时表

end;

truncate TABLE tmp; -- 使用 truncate TABLE 的方法来提高性能

end;

;;

delimiter ;;

执行存储过程:

call sp_test_tt();


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-119986-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...