mysql游标循环去重_mysql 存储过程中使用游标中使用临时表可以替代数组效果

mysql不支持数组。但有时候需要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题.临时表:只有在当前连接情况下, TEMPORARY 表才是可见的。当连接关闭时, TEMPORARY 表被自动取消。必须拥有 create temporary table 权限,才能创建临时表。可以通过指定 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');

电脑技术002pc网从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),

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; -- 循环结束设置跳出标识

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;

end LOOP; -- 结束循环

CLOSE cur; -- 关闭游标

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

end;

truncate TABLE tmp; -- 使用 truncate TABLE 的方式来提升性能

end;

;;

delimiter ;;

执行存储过程:

call sp_test_tt();

更多:mysql 存储过程中使用游标中使用临时表可以替代数组效果

https://www.002pc.comhttps://www.002pc.com/mysql/6171.html

你可能感兴趣的游标,mysql,使用,数组,存储,替代

No alive nodes found in your cluster

0踩

0 赞

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值