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

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

当前位置: 主页>网站教程>数据库> mysql怎样新建存储历程
分享文章到:

mysql怎样新建存储历程

发布时间:08/01 来源:未知 浏览: 关键词:
存储历程就是拥有名字的一段代码,用来完成一个特定的功能。这是存储历程中的功能代码BEGINDELETEFROMMATCHESWHEREplayernop_playerno;END$$。 存储历程(Stored Procedure):一组可编程的函数,是为了完成特定功能的SQL语句集,经编译新建并保留在数据库中,会员可通过指定存储历程的名字并给定参数(需要时)来调取施行。

举荐课程:MySQL教程。

长处(为何要用存储历程?):

①将反复性很高的一些操纵,封装到一个存储历程中,简化了对这些SQL的调取

②大量处置:SQL+轮回,减少流量,也就是“跑批”

③同一接口,确保数据的平安

相关于oracle数据库来说,MySQL的存储历程相对功能较弱,运用较少。

一、存储历程的新建和调取

  >存储历程就是拥有名字的一段代码,用来完成一个特定的功能。

  >新建的存储历程保留在数据库的数据字典中。

1、新建存储历程

CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body

proc_parameter:
    [ IN | OUT | INOUT ] param_name type

characteristic:
    COMMENT 'string'
  | LANGUAGE SQL  | [NOT] DETERMINISTIC  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }  | SQL SECURITY { DEFINER | INVOKER }

routine_body:
  Valid SQL routine statement

[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]

#新建数据库,备份数据表用于示例操纵

mysql> create database db1;
mysql> use db1;    
mysql> create table PLAYERS as select * from TENNIS.PLAYERS;
mysql> create table MATCHES  as select * from TENNIS.MATCHES;

示例:新建一个存储历程,删除给定球员加入的所有竞赛

mysql> delimiter $$  #将语句的完毕符号从分号;暂时改为两个$$(可以是自定义)
mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
    -> BEGIN
    ->   DELETE FROM MATCHES
    ->    WHERE playerno = p_playerno;
    -> END$$
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter ;  #将语句的完毕符号恢复为分号

解析:

默许状况下,存储历程和默许数据库相干联,要是想指定存储历程新建在某个特定的数据库下,那么在历程名前面加数据库名做前缀;

在定义历程时,运用DELIMITER $$ 下令将语句的完毕符号从分号 ; 暂时改为两个$$,使得历程体中运用的分号被直接通报到办事器,而不会被客户端(如mysql)解释。

二、存储历程的参数

  存储历程可以有0个或多个参数,用于存储历程的定义。

3种参数类型:

IN输入参数:表示调取者向历程传入值(传入值可以是字面量或变量)

OUT输出参数:表示历程向调取者传出值(可以返回多个值)(传出值只能是变量)

INOUT输入输出参数:既表示调取者向历程传入值,又表示历程向调取者传出值(值只能是变量)

1、in输入参数

mysql> delimiter $$
mysql> create procedure in_param(in p_in int)    -> begin    ->   select p_in;    ->   set p_in=2;    ->    select P_in;    -> end$$
mysql> delimiter ;
mysql> set @p_in=1;
mysql> call in_param(@p_in);+------+
| p_in |
+------+
|    1 |
+------+
+------+
| P_in |
+------+
|    2 |
+------+mysql> select @p_in;+-------+
| @p_in |
+-------+
|     1 |
+-------+

#以上可以看出,p_in在存储历程中被修改,但并不影响@p_id的值,由于前者为部分变量、后者为全局变量。

2、out输出参数

mysql> delimiter //mysql> create procedure out_param(out p_out int)    ->   begin    ->     select p_out;    ->     set p_out=2;    ->     select p_out;    ->   end    -> //mysql> delimiter ;

mysql> set @p_out=1;

mysql> call out_param(@p_out);+-------+
| p_out |
+-------+
|  NULL |
+-------+  #由于out是向调取者输出参数,不接收输入的参数,所以存储历程里的p_out为null+-------+
| p_out |
+-------+
|     2 |
+-------+mysql> select @p_out;+--------+
| @p_out |
+--------+
|      2 |
+--------+  #调取了out_param存储历程,输出参数,转变了p_out变量的值

3、inout输入参数

mysql> delimiter $$
mysql> create procedure inout_param(inout p_inout int)    ->   begin    ->     select p_inout;    ->     set p_inout=2;    ->     select p_inout;    ->   end    -> $$
mysql> delimiter ;

mysql> set @p_inout=1;

mysql> call inout_param(@p_inout);+---------+
| p_inout |
+---------+
|       1 |
+---------+

+---------+
| p_inout |
+---------+
|       2 |
+---------+mysql> select @p_inout;+----------+
| @p_inout |
+----------+
|        2 |
+----------+

#调取了inout_param存储历程,承受了输入的参数,也输出参数,转变了变量

注意:

①要是历程没有参数,也必需在历程名背面写上小括号

    例:CREATE PROCEDURE sp_name ([proc_parameter[,...]]) ……

②确保参数的名字不等于列的名字,不然在历程体中,参数名被当成列名来处置

热烈倡议:

>输入值运用in参数;

>返回值运用out参数;

>inout参数就尽量的少用。

以上就是mysql怎样新建存储历程的细致内容,更多请关注 百分百源码网 其它相干文章!

打赏

打赏

取消

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

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

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

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

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

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板