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 ;

简单易懂,而且也比较完善。

这个是对循环结束的条件设置。

SQLSTATE '02000'是一个未找到条件,当REPEAT由于没有更多的行供循环而不能继续时,出现这个条件。
    关于MySQL 5使用的 MySQL错误代码列表,请参阅 http://dev.mysql.com/doc/mysql/en/error-handling.html 。
 
还有一种方式是使用
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_products = 1 ;

这种方式试了下,没成功,一种方式可以就行了,倘若以后有机会可以再操作。

到位。

mysql存储过程之游标的更多相关文章

  1. mysql存储过程之游标遍历数据表

    原文:mysql存储过程之游标遍历数据表 今天写一个mysql存储过程,根据自己的需求要遍历一个数据表,因为对存储过程用的不多,语法不甚熟悉,加之存储过程没有调试环境,花了不少时间才慢慢弄好,故留个痕 ...

  2. MySQL存储过程之游标实战

    MySQL存储过程之游标实战 ​ 博主日前在解决一个项目需求时,没有什么好的方法,于是就来学习存储过程了,之前也是接触过,奈何年少贪玩,竟是全部又还给了大学老师-苦不堪言呐-. ​ 先说一下业务需求吧 ...

  3. MariaDB MariaDB、MySQL存储过程、游标基础应用举例说明

    MariaDB.MySQL存储过程.游标基础应用举例说明 by:授客 QQ:1033553122 测试环境: MariaDB-10.0.19-centos7-x86_64 实践操作: # 创建测试数据 ...

  4. MYSQL存储过程、游标、触发器

    MySQL5 中添加了存储过程的支持. 大多数SQL语句都是针对一个或多个表的单条语句.并非所有的操作都怎么简单.经常会有一个完整的操作需要多条才能完成  存储过程简单来说,就是为以后的使用而保存的一 ...

  5. MYSQL学习拓展一:MySQL 存储过程之游标的使用!

    一.MySQL游标的概念 游标介绍: MySQL的游标(cursor)是一个重要的概念,通过查找资料与自己的理解,主要得出以下几点关于自己的理解. 有数据缓冲的思想:游标的设计是一种数据缓冲区的思想, ...

  6. MySQL存储过程和游标

    一.存储过程 什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法. 什么是存储过程: 存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些 ...

  7. 解析MySQL存储过程的游标执行过程

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 内容提纲 一.测试环境搭建 二.执行过程解析 三.注意事项 一.测试环境搭建 首先创建一张表,并插入几行数据字段: CRE ...

  8. Mysql 存储过程使用游标

    -- 完整例子 CREATE PROCEDURE test BEGIN -- 定义参数    DECLARE _id INT; -- 定义游标    DECLARE no_more_products ...

  9. MySQL存储过程-->通过游标遍历和异常处理迁移数据到历史表

    -- 大表数据迁移,每天凌晨1点到5点执行,执行间隔时间10分钟,迁移旧数据到历史表. DELIMITER $$ USE `dbx`$$ DROP PROCEDURE IF EXISTS `pro_x ...

随机推荐

  1. 伤不起:File.toPath() & Paths.get()

    java.nio.file.Path这个类应该是从java7才开始有的. 通过File类有两个方法可以转换成Path. 1. Path p = Paths.get(file.toURI());  // ...

  2. Spring MVC 向页面传值-Map、Model和ModelMap

    原文链接:https://www.cnblogs.com/caoyc/p/5635878.html Spring MVC 向页面传值-Map.Model和ModelMap 除了使用ModelAndVi ...

  3. 「Vue」vue cli3项目打包为APP方法及坑点

    1.执行npm run build之后生成dist文件夹 2.打开HBuilderX新建一个APP项目 3.把dist文件夹里的所有文件拷贝替换到APP文件夹下 4.打开manifest.json文件 ...

  4. es7----proxy

    proxy是代理的意思,es7新增这个可以代理某个变量的“增删改查”,vue的核心原理就是这个~~ 基本使用方法: let json = {a: 123, c: 999} let p = new Pr ...

  5. Oracle 重要知识点

    这些是最简单的,理解这些再去看其他的高深一点的吧....... 游标 oracle里面的游标分为四种情况,分别是LOOP循环,FOR循环,删除,更新 1.LOOP循环 检索EMP表.使用LOOP循环语 ...

  6. 【整理】Git相关资料

    http://book.51cto.com/art/201107/278731.htm http://book.51cto.com/art/201107/278828.htm  

  7. 第11月第20天 sqlite3_open xcode mysql connector

    1. sqlite3_open 死锁 * thread #1, queue = 'com.apple.main-thread', stop reason = signal SIGSTOP frame ...

  8. Metasploit输出重定向到文件

    Metasploit是我们经常会使用到的神器,但是运行exploit/run无法保存输出信息,查看不是很方便. 现在可以使用spool来保存输出信息: Metasploit Framework Con ...

  9. SVM Kernel Functions

    ==================================================================== This article came from here. Th ...

  10. 普通用户修改root密码【转】

    在普通用户下修改root用户密码 1 从普通用户切换到root用户  sudo -s  再输入密码.2 输入passwd ,会提醒你输入当前用户密码,验证后会提醒你输入root用户密码.3 切换到ro ...