美文网首页
Mysql 游标(基础篇)

Mysql 游标(基础篇)

作者: 码谜妈咪 | 来源:发表于2017-02-09 16:23 被阅读0次

    在数据库中,游标是一个十分重要的概念。游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL  选择语句相关联因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功,该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。

    游标允许应用程序对查询语句select  返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;而且,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。

    一,什么是游标(cursor)

    个人觉得就是一个cursor,就是一个标识,用来标识数据取到什么地方了。你也可以把它理解成数组中的下标。

    二,游标(cursor)的特性

    1,只读的,不能更新的。

    2,不滚动的

    3,不敏感的

    游标(cursor)必须在声明处理程序之前被声明,并且变量和条件必须在声明游标或处理程序之前被声明。

    三,游标的使用

    1.数据库中创建函数 ----- 点击函数中的创建函数

    2.弹出如下窗口,设置函数名(比如:syf)

    3.然后在查询框会自动生成代码

    ```

    ```

    DELIMITER $$

    CREATE

    /*[DEFINER = { user | CURRENT_USER }]*/

    FUNCTION `jingluovip`.`syf`()

    RETURNS TYPE

    /*LANGUAGE SQL

    | [NOT] DETERMINISTIC

    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

    | SQL SECURITY { DEFINER | INVOKER }

    | COMMENT 'string'*/

    BEGIN

    ```

    --这里写自己的代码

    END$$

    DELIMITER ;

    ```

    4.续写自己需要的代码

    ```

    DELIMITER $$

    USE `jingluovip`$$

    DROP PROCEDURE IF EXISTS `syf`$$

    CREATE DEFINER=`root`@`localhost` PROCEDURE `syf`

    BEGIN

    DECLARE  no_more_record INT DEFAULT 0;

    DECLARE  a INT DEFAULT 1;

    DECLARE  user_username VARCHAR(50);

    DECLARE  user_money FLOAT(12,2);

    DECLARE  cur_record CURSOR FOR  SELECT username, money FROM `jingluovip`.`sinbegin_user`;  /*首先这里对游标进行定义*/

    DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record = 1;/*这个是个条件处理,针对NOT FOUND的条件,当没有记录时赋值为1*/

    OPEN  cur_record;/*接着使用OPEN打开游标*/

    -- 开始循环

    read_loop: LOOP

    -- 提取游标里的数据,这里只有一个,多个的话也一样;

    FETCH  cur_record INTO user_username, user_money;/*把第一行数据写入变量中,游标也随之指向了记录的第一行*/

    -- 声明结束的时候

    -- 注意:这里的循环体可以根据自己的需要设定(while,while...do,if...then等等)

    IFno_more_record = 1THEN

    LEAVE read_loop;

    END IF;

    -- 这里做你想做的循环的事件

    UPDATE `dg_users` SET `j_price`=user_money WHERE `username`=user_username ;

    SET a = a+1;

    END LOOP;

    CLOSE  cur_record;  /*用完后记得用CLOSE把资源释放掉*/

    SELECT a;

    END$$

    DELIMITER ;

    ```

    5.开始执行:执行完成后的结果是这样

    表示执行成功了!

    6.刷新数据库或者直接打开存储过程,会看到一个syf的文件,然后执行这个创建的函数syf,

    CALL syf();

    最终的数据结果表中会出现a=3318;这样游标也就执行完成了.

    相关文章

      网友评论

          本文标题:Mysql 游标(基础篇)

          本文链接:https://www.haomeiwen.com/subject/foxwittx.html