mysql 存储过程中使用游标中使用临时表可以替代数组效果
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql 存储过程中使用游标中使用临时表可以替代数组效果,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1931字,纯文字阅读大概需要3分钟。
内容图文
必须拥有 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‘);
临时表支持主键、索引指定。在连接非临时表查询可以利用指定主键或索引来提升性能。存储过程语句及游标和临时表综合实例:
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 存储过程中使用游标中使用临时表可以替代数组效果
标签:set open loop 使用 cal 声明 关闭 rom truncate
本文系统来源:http://www.cnblogs.com/sztx/p/7425800.html
内容总结
以上是互联网集市为您收集整理的mysql 存储过程中使用游标中使用临时表可以替代数组效果全部内容,希望文章能够帮你解决mysql 存储过程中使用游标中使用临时表可以替代数组效果所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。