mysql存储过程之游标
MySQL5 中添加了存储过程的支持。
大多数SQL语句都是针对一个或多个表的单条语句。并非所有的操作都怎么简单。经常会有一个完整的操作需要多条才能完成
存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批文件。虽然他们的作用不仅限于批处理。
为什么要使用存储过程:优点
1 通过吧处理封装在容易使用的单元中,简化复杂的操作
2 由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果开发人员和应用程序都使用了同一存储过程,则所使用的代码是相同的。还有就是防止错误,需要执行的步骤越多,出错的可能性越大。防止错误保证了数据的一致性。
3 简化对变动的管理。如果表名、列名或业务逻辑有变化。只需要更改存储过程的代码,使用它的人员不会改自己的代码了都。
4 提高性能,因为使用存储过程比使用单条SQL语句要快
5 存在一些职能用在单个请求中的MySQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码
换句话说3个主要好处简单、安全、高性能
缺点
1 一般来说,存储过程的编写要比基本的SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。
2 你可能没有创建存储过程的安全访问权限。许多数据库管理员限制存储过程的创建,允许用户使用存储过程,但不允许创建存储过程
存储过程是非常有用的,应该尽可能的使用它们
存储过程使用对我这种菜鸡来说还是有些难度的,没系统学过,看了同事写的之后,大概看得懂,但是看到cursor游标之后有些懵,特此总结与一下
使用游标
MySQL5添加了对游标的支持
只能用于存储过程
直接上一个已经完善的存储过程,用于对表数据的copy
DELIMITER $$ USE `chy2019` $$ DROP PROCEDURE IF EXISTS `copy_order_data` $$ CREATE DEFINER = `root` @`%` PROCEDURE `copy_order_data` (IN p_source VARCHAR (100))
BEGIN
-- 需要定义接收游标数据的变量
DECLARE done BOOLEAN DEFAULT 0 ;
-- 自定义变量
DECLARE var_price DOUBLE DEFAULT NULL ;
DECLARE var_pay_time TIMESTAMP DEFAULT NULL ;
DECLARE var_product VARCHAR (100) DEFAULT NULL ;
DECLARE var_source VARCHAR (100) DEFAULT NULL ;
-- 声明游标
DECLARE cur CURSOR FOR
-- 作用于哪个语句
SELECT
price,
pay_time,
product,
source
FROM
cms_aw_order
WHERE source = p_source ;
-- 设置结束标志
-- 这条语句定义了一个 CONTINUE HANDLER,它是在条件出现时被执行的代码。这里,它指出当 SQLSTATE '02000'出现时,SET done=1 。SQLSTATE '02000'是一个未找到条件,当REPEAT由于没有更多的行供循环而不能继续时,出现这个条件
DECLARE CONTINUE HANDLER FOR SQLSTATE '' SET done = 1 ;
-- 打开游标
OPEN cur ;
-- 使用repeat循环语法
REPEAT
-- 批读取数据到指定变量上
FETCH cur INTO var_price,
var_pay_time,
var_product,
var_source ;
-- 进行逻辑操作
INSERT INTO cms_aw_order_copy (price, pay_time, product, source)
VALUES
(
var_price,
var_pay_time,
var_product,
var_source
) ;
-- 循环结束条件
UNTIL done
END REPEAT ;
-- 关闭游标
CLOSE cur ;
END $$ DELIMITER ;
简单易懂,而且也比较完善。

这个是对循环结束的条件设置。
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_products = 1 ;
这种方式试了下,没成功,一种方式可以就行了,倘若以后有机会可以再操作。
到位。
mysql存储过程之游标的更多相关文章
- mysql存储过程之游标遍历数据表
原文:mysql存储过程之游标遍历数据表 今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环境,花了不少时间才慢慢弄好,故留个痕 ...
- MySQL存储过程之游标实战
MySQL存储过程之游标实战 博主日前在解决一个项目需求时,没有什么好的方法,于是就来学习存储过程了,之前也是接触过,奈何年少贪玩,竟是全部又还给了大学老师-苦不堪言呐-. 先说一下业务需求吧 ...
- MariaDB MariaDB、MySQL存储过程、游标基础应用举例说明
MariaDB.MySQL存储过程.游标基础应用举例说明 by:授客 QQ:1033553122 测试环境: MariaDB-10.0.19-centos7-x86_64 实践操作: # 创建测试数据 ...
- MYSQL存储过程、游标、触发器
MySQL5 中添加了存储过程的支持. 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成 存储过程简单来说,就是为以后的使用而保存的一 ...
- MYSQL学习拓展一:MySQL 存储过程之游标的使用!
一.MySQL游标的概念 游标介绍: MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想, ...
- MySQL存储过程和游标
一.存储过程 什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法. 什么是存储过程: 存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些 ...
- 解析MySQL存储过程的游标执行过程
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 内容提纲 一.测试环境搭建 二.执行过程解析 三.注意事项 一.测试环境搭建 首先创建一张表,并插入几行数据字段: CRE ...
- Mysql 存储过程使用游标
-- 完整例子 CREATE PROCEDURE test BEGIN -- 定义参数 DECLARE _id INT; -- 定义游标 DECLARE no_more_products ...
- MySQL存储过程-->通过游标遍历和异常处理迁移数据到历史表
-- 大表数据迁移,每天凌晨1点到5点执行,执行间隔时间10分钟,迁移旧数据到历史表. DELIMITER $$ USE `dbx`$$ DROP PROCEDURE IF EXISTS `pro_x ...
随机推荐
- Scala进阶之路-I/O流操作之文件处理
Scala进阶之路-I/O流操作之文件处理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 说起Scala语言操作文件对象其实是很简单的,大部分代码和Java相同. 一.使用Scal ...
- 蓝桥杯 算法训练 单词接龙 _DFS_搜索 字符串比较
单词接龙 问题描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相 ...
- 网络_OSI模型_数据包传输
2017年1月12日, 星期四 网络_OSI模型_数据包传输 1. 网络_源主机_局域网_交换机_路由器_目标主机 2. OSI7七层_TCP/IP精简 OSI 7层: 应用层 ...
- pgadmin导出excel
生成导入sql 第一行公式:="insert into province(code,name) values("&A2&",'"&B2& ...
- html5 canvas贝塞尔曲线篇(上)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- [转载]Brackets - 强大免费的开源跨平台Web前端开发工具IDE (HTML/CSS/Javascript代码编辑器)
http://brackets.io/ Brackets 是一个免费.开源且跨平台的 HTML/CSS/JavaScript 前端 WEB 集成开发环境 (IDE工具).该项目由 Adobe 创建和维 ...
- [整理]IE11中的WebGL探秘:渲染速度超Chrome
http://www.csdn.net/article/2013-12-19/2817854-IE11-WebGL-and-more 摘要:IE11开始支持WebGL,并且效果非常好,IE11的Web ...
- SOCKET中send和recv函数工作原理与注意点
https://blog.csdn.net/rankun1/article/details/50488989
- 20155216 2016-2017-2 《Java程序设计》第八周学习总结
20155216 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 认识NIO Java NIO 由以下几个核心部分组成: Channels Buffers S ...
- OC中实现锁
熟悉多线程开发的同学对锁肯定不陌生,但是OC中如何实现锁呢?给大家科普一下. 首先构建一个测试用的类,假想它是我们的一个共享资源,method1与method2是互斥的,代码如下: @implemen ...