百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> Mysql变量、游标及存储历程的利用
分享文章到:

Mysql变量、游标及存储历程的利用

发布时间:09/01 来源:未知 浏览: 关键词:
Mysql自5.0起就支撑储备历程,储备历程通俗的讲就是在一段封装过的SQL,但不仅仅只要SQL那么简便,平常还会有变量、前提推断、轮回体,游标等。

储备历程的作用

在许多场景中,需要将多个表的数据处置,来发生新的我们需要的数据。这些多个表的数据并不克不及通过连接等查询方式给出,只能通过推断和轮回才能发生。这个时候,就可以利用储备历程来实现。

此外,储备历程还有一些好处,比方机能比力高,还有能减少网络恳求。假如不消储备历程来实现的话,使用php来实现就需要调取屡次mysql,发生屡次恳求。

当然,储备历程也不是没有缺陷的,它比力哪调式,别的不支撑集群。

创立储备历程

创立储备历程语法如下:

CREATE PROCEDURE 历程名(参数) 
BEGIN
 历程体
END

关于参数,设定参数语法为

[IN|OUT|INOUT] 参数名 类型

  • IN 表示该变量只能在历程体内使用

  • OUT 表示该变量只能在历程体外使用

  • INOUT 表示在历程体内和体外都能使用

下面,我们来创立一个最简便的储备历程。

CREATE PROCEDURE p1(IN x INT) 
BEGIN
  SELECT x;
END;

变量

在MySQL中变量分为全局变量和部分变量。

全局变量以@开头,无需声明,直接使用即可,如

SET @name='gwx';

部分变量需要先声明,部分变量的初始化办法如下:

DECLARE x int DEFAULT 0;

下面我们来完成一个储备历程:按照路程运算车费,3公里内按6远运算,超越的间隔按每公里1.2元运算.

-- distance 路程
CREATE PROCEDURE p1(in distance FLOAT)
BEGIN
  DECLARE d_money FLOAT DEFAULT 0; 
    IF distance>3 THEN 
       SET d_money=6+(distance-3)*1.2;
    ELSE
      SET d_money=6;
    END IF;
    SELECT d_money;
END;

游标

拿php做比力,游标有点想foreach,每次轮回猎取一笔记录。

定义一个游标:

declare 游标名 CURSOR FOR SELECT 语句

开启关闭游标:

  • open 游标名

  • close 游标名

取游标数据:

FETCH 游标名 INTO 变量名

可以这么简便的介绍,大家会有迷惑,不分明应当怎样去使用。下面,来看一个实例,从实例中学习怎样使用游标。

用游标完成一个非常简便的功效,将test_cursor表中数字全部累加起来。

CREATE TABLE IF NOT EXISTS test_cursor(
  num1 INT(10) UNSIGNED NOT NULL DEFAULT 0,
  num2 INT(10) UNSIGNED NOT NULL DEFAULT 0
);    
INSERT INTO test_cursor(num1,num2) VALUES(1,1),(2,2),(3,3);
 
CREATE PROCEDURE `test_cursor`()
BEGIN
    DECLARE sum INT(10) DEFAULT 0;
    DECLARE n1,n2 INT(10);
    DECLARE done INT DEFAULT 0;
    
    DECLARE cur CURSOR FOR SELECT num1,num2 FROM test_cursor; 
    DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; 
    
    OPEN cur; -- 翻开游标
    WHILE done=0 DO      
        FETCH cur INTO n1,n2;
        
        IF done=0 THEN -- 留意这里为什么加IF前提,不加的话,最后一个值会被多加一遍         
      SET sum=sum+n1+n2;
        END IF;
    END WHILE;
    CLOSE cur;  -- 关闭游标
    
    SELECT sum;
END

这里有几点需要留意,第一部分变量的定义必需要在声明游标前声明。

别的,这里DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; 表示游标完毕后将done设定为1,以完毕轮回。

以上就是Mysql变量、游标及储备历程的利用的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板