MySQL存款和储蓄进程

发布时间:2019-05-02  栏目:MyBatis  评论:0 Comments

http://www.cnblogs.com/exmyth/p/3303470.html 

MySQL存储进程和函数,MySQL存款和储蓄进度函数

储存进度和函数:

始建示范代码:

DELIMITER $$

CREATE PROCEDURE proc(IN c_id INT, IN c_name VARCHAR(20), OUT count INT)
READS SQL DATA
BEGIN
    SELECT *
    FROM course
    WHERE cou_no = c_id
    OR cou_name = c_name;

    SELECT FOUND_ROWS() INTO count;
END $$

DELIMITER

另:

一、存款和储蓄进度或函数能够调用别的的进程或函数。

二、{READS SQL DATA|MODIFIES SQL DATA|NO SQL|CONTAINS
SQL}:那些特点值提供子程序采用数据的内在消息,那么些特征值近年来只是提要求服务器,并未依据那么些特征值来约束进度实际上运用数据的动静。

  • READS SQL DATA:表示子程序包蕴读数据的言语,但不包括写多少的言辞。
  • MODIFIES SQL DATA:表示子程序包蕴写多少的讲话。
  • NO SQL:表示子程序不含有SQL语句。
  • CONTAINS SQL:表示子程序不包蕴读大概写多少的说话。

若果这个特色未有强烈给定,暗中同意使用的值是CONTAINS SQL。  

测试代码(分别推行):

CALL proc(1,'信息系统',@a);

SELECT @a;

除去存储进程还是函数代码:

DROP PROCEDURE proc;

NAVICAT制造存款和储蓄过程和函数进度:

一、点击函数,新建函数

图片 1

2、选择“过程”

图片 2

三、早先编写制定期存款款和储蓄进程或函数

图片 3

肆、点击“保存”,填写名称

图片 4

http://www.bkjia.com/Mysql/1031771.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/1031771.htmlTechArticleMySQL存储过程和函数,MySQL存储过程函数
存储进程和函数: 创设示范代码: DELIMITE卡宴 $$CREATE PROCEDURE proc(IN
c_id INT, IN c_name VARCHAR(20), OUT count…

14.1.一 创立存款和储蓄进度

MySQL中,成立存款和储蓄进程的大旨方式如下:

  1. CREATE PROCEDURE sp_name ([proc_parameter[,…]])  
  2.         [characteristic …] routine_body 

其中,sp_name参数是积累进程的称号;proc_parameter代表存款和储蓄进度的参数列表;
characteristic参数钦命存款和储蓄进程的表征;routine_body参数是SQL代码的内容,能够用BEGIN…END来表明SQL代码的上三保太监终结。

proc_parameter中的每一种参数由三部分构成。那叁部分各自是输入输出类型、参数名称和参数类型。其方式如下:

  1. [ IN | OUT | INOUT ] param_name type 

里面,IN表示输入参数;OUT表示输出参数;
INOUT表示既能够是输入,也能够是出口;
param_name参数是储存进程的参数名称;type参数钦定期存款款和储蓄进度的参数类型,该品种能够是MySQL数据库的放4数据类型。

characteristic参数有七个取值。其取值表达如下:

LANGUAGE
SQL:说明routine_body部分是由SQL语言的讲话组成,那也是数据库系统默许的言语。

[NOT]
DETEENCOREMINISTIC:指明存款和储蓄进度的试行结果是还是不是是明确的。DETE哈弗MINISTIC表示结果是规定的。每一回实践存储进度时,同样的输入会得到1致的输出。NOT
DETEENVISIONMINISTIC表示结果是非鲜明的,同样的输入恐怕获得分化的出口。暗中认可情况下,结果是非明显的。

{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA
}:指明子程序采用SQL语句的限制。CONTAINS
SQL表示子程序蕴涵SQL语句,但不包涵读或写多少的言辞;NO
SQL表示子程序中不含有SQL语句;READS SQL
DATA表示子程序中富含读数据的讲话;MODIFIES SQL
DATA表示子程序中涵盖写多少的话语。暗许情形下,系统会钦点为CONTAINS SQL。

SQL SECUTiguanITY { DEFINE中华V | INVOKE奥迪Q7}:指明谁有权力来实行。DEFINERubicon表示除非定义者自身手艺够实施;INVOKE大切诺基表示调用者能够推行。默许情状下,系统钦赐的权能是DEFINE哈弗。

COMMENT ‘string’:注释信息。

技巧:成立存款和储蓄进度时,系统私下认可钦点CONTAINS
SQL,表示存款和储蓄进程中应用了SQL语句。然而,即便存款和储蓄进程中从不利用SQL语句,最佳设置为NO
SQL。而且,存款和储蓄进程中最佳在COMMENT部分对存款和储蓄进度进行轻便的讲解,以便未来在阅读存款和储蓄进程的代码时进一步惠及。

【示例1四-一】 上面创立二个名称叫num_from_employee的仓库储存过程。代码如下:

  1. CREATE  PROCEDURE  num_from_employee (IN emp_id INT, OUT count_num INT )
     
  2.           READS SQL DATA  
  3.           BEGIN  
  4.               SELECT  COUNT(*)  INTO  count_num  
  5.               FROM  employee  
  6.               WHERE  d_id=emp_id ;  
  7.           END 

上述代码中,存款和储蓄进程名字为num_from_employee;输入变量为emp_id;输出变量为count_num。SELECT语句从employee表查询d_id值等于emp_id的记录,并用COUNT(*)计算d_id值同样的笔录的条数,最后将总结结果存入count_num中。代码的执行结果如下:

  1. mysql> DELIMITER &&  
  2. mysql> CREATE  PROCEDURE  num_from_employee
    (IN emp_id INT, OUT count_num INT )  
  3.     -> READS SQL DATA  
  4.     -> BEGIN  
  5.     -> SELECT  COUNT(*)  INTO  count_num
     
  6.     -> FROM  employee  
  7.     -> WHERE  d_id=emp_id ;
     
  8.     -> END &&  
  9. Query OK, 0 rows affected (0.09 sec)  
  10. mysql> DELIMITER ; 

代码实行落成后,未有报出任何失误音讯就象征存款和储蓄函数已经创立成功。今后就可以调用那些蕴藏进度,数据库中会实施存款和储蓄进程中的SQL语句。

证实:MySQL中默许的言语甘休符为分号(;)。存款和储蓄进程中的SQL语句需求分号来   
停止。为了幸免抵触,首先用”DELIMITE本田CR-V&&”将MySQL的扫尾符设置为&&。最终再用”DELIMITEOdyssey;”来将终结符复苏成分号。那与创制触发器时是千篇1律的。

 

 

 

**14.1.2 开创存款和储蓄函数**

在MySQL中,创立存款和储蓄函数的中央情势如下:

  1. CREATE FUNCTION sp_name ([func_parameter[,…]])  
  2.         RETURNS type  
  3.         [characteristic …] routine_body 

其中,sp_name参数是储存函数的名称;func_parameter表示存款和储蓄函数的参数列表;RETU凯雷德NS
type钦赐再次回到值的档期的顺序;characteristic参数钦定期存款款和储蓄函数的性状,该参数的取值与储存进度中的取值是同样的,请读者参考1四.1.一小节的剧情;routine_body参数是SQL代码的始末,能够用BEGIN…END来注解SQL代码的早先和结束。

func_parameter能够由七个参数组成,个中种种参数由参数名称和参数类型组成,其款式如下:

  1. param_name type 

其中,param_name参数是储存函数的参数名称;type参数钦赐存款和储蓄函数的参数类型,该项目能够是MySQL数据库的妄动数据类型。

【示例14-2】 下边创设一个名称叫name_from_employee的蕴藏函数。代码如下:

  1. CREATE  FUNCTION  name_from_employee (emp_id INT )  
  2.           RETURNS VARCHAR(20)  
  3.           BEGIN  
  4.               RETURN  (SELECT  name  
  5.               FROM  employee  
  6.               WHERE  num=emp_id );  
  7.           END 

上述代码中,存款和储蓄函数的名叫name_from_employee;该函数的参数为emp_id;再次回到值是VALX570CHA奥迪Q7类型。SELECT语句从employee表查询num值等于emp_id的笔录,并将该记录的name字段的值重返。代码的试行结果如下:

  1. mysql> DELIMITER &&  
  2. mysql> CREATE  FUNCTION  name_from_employee (emp_id INT )
     
  3.     -> RETURNS VARCHAR(20)  
  4.     -> BEGIN  
  5.     -> RETURN  (SELECT  name  
  6.     -> FROM  employee  
  7.     -> WHERE  num=emp_id );  
  8.     -> END&&  
  9. Query OK, 0 rows affected (0.00 sec)  
  10. mysql> DELIMITER ; 

结果呈现,存储函数已经创办成功。该函数的施用和MySQL内部函数的运用办法一致。

 

 

 

1四.一.三  变量的选择

在蕴藏进程和函数中,能够定义和平运动用变量。用户能够运用DECLARE关键字来定义变量。然后可感到变量赋值。那么些变量的法力范围是BEGIN…END程序段中。本小节将执教怎么样定义变量和为变量赋值。

一.定义变量

MySQL中能够行使DECLARE关键字来定义变量。定义变量的大旨语法如下:

  1. DECLARE  var_name[,…]  type  [DEFAULT value] 

个中,
DECLARE关键字是用来声称变量的;var_name参数是变量的名目,这里能够同时定义多个变量;type参数用来钦命变量的等级次序;DEFAULT
value子句将变量私下认可值设置为value,未有接纳DEFAULT子句时,暗中认可值为NULL。

【示例14-三】
上边定义变量my_sql,数据类型为INT型,暗中认可值为拾。代码如下:

  1. DECLARE  my_sql  INT  DEFAULT 10 ; 

贰.为变量赋值

MySQL中得以应用SET关键字来为变量赋值。SET语句的主干语法如下:

  1. SET  var_name = expr [, var_name = expr] … 

当中,SET关键字是用来为变量赋值的;var_name参数是变量的称号;expr参数是赋值表明式。五个SET语句能够而且为多少个变量赋值,各种变量的赋值语句之间用逗号隔断。

【示例1四-四】 上面为变量my_sql赋值为30。代码如下:

  1. SET  my_sql = 30 ; 

MySQL中仍可以利用SELECT…INTO语句为变量赋值。其宗旨语法如下:

  1. SELECT  col_name[,…]  INTO  var_name[,…]  
  2.     FROM  table_name  WEHRE  condition 

其中,col_name参数表示查询的字段名称;var_name参数是变量的名称;table_name参数指表的名号;condition参数指查询条件。

【示例14-5】
上边从employee表中查询id为2的记录,将该记录的d_id值赋给变量my_sql。代码如下:

  1. SELECT  d_id  INTO  my_sql  
  2.         FROM  employee  WEHRE  id=2 ; 

 

 

14.壹.四  定义规则和管理程序

概念规则和管理程序是预先定义程序试行进程中大概境遇的主题材料。并且能够在管理程序中定义化解那个标题标不二秘籍。那种艺术能够提前预测或然出现的主题素材,并提出化解办法。那样能够巩固程序管理难点的才能,防止程序分外结束。MySQL中都以因而DECLARE关键字来定义规则和管理程序。本小节少将详细解说如何定义规则和管理程序。

一.定义规则

MySQL中能够动用DECLARE关键字来定义规则。其基本语法如下:

  1. DECLARE  condition_name  CONDITION  FOR  condition_value  
  2. condition_value:  
  3.       SQLSTATE [VALUE] sqlstate_value | mysql_error_code 

其中,condition_name参数表示原则的称呼;condition_value参数表示原则的品种;sqlstate_value参数和mysql_error_code参数都可以表示MySQL的失实。比方E汉兰达RO福特Explorer11四6 (4二S0贰)中,sqlstate_value值是42S02,mysql_error_code值是1146。

【示例1四-六】 上边定义”ETiguanRO翼虎 1146(4二S02)”那么些漏洞非常多,名字为can_not_find。能够用几种区别的主意来定义,代码如下:

  1. //方法一:使用sqlstate_value  
  2. DECLARE  can_not_find  CONDITION  FOR  SQLSTATE  ’42S02′ ;  
  3. //方法二:使用mysql_error_code  
  4. DECLARE  can_not_find  CONDITION  FOR  1146 ; 

二.概念管理程序

MySQL中得以选取DECLARE关键字来定义处理程序。当中央语法如下:

  1. DECLARE handler_type HANDLER FOR 
    condition_value[,…] sp_statement  
  2. handler_type:  
  3.     CONTINUE | EXIT | UNDO  
  4. condition_value:  
  5.     SQLSTATE [VALUE] sqlstate_value |
    condition_name  | SQLWARNING  
  6.        | NOT FOUND  | SQLEXCEPTION  | mysql_error_code 

其中,handler_type参数指明错误的管理格局,该参数有3个取值。那三个取值分别是CONTINUE、EXIT和UNDO。CONTINUE表示遇见错误不开展管理,继续向下进行;EXIT表示遇见错误后立即退出;UNDO表示遇见错误后重临在此之前的操作,MySQL中权且还不帮助那种管理格局。

留神:经常情况下,实施进度中遇到错误应该立刻停止施行下边包车型地铁话语,并且撤回前边的操作。可是,MySQL中未来还不能够支撑UNDO操作。由此,蒙受错误时最棒实行EXIT操作。如果事先可以预测错误类型,并且开始展览对应的管理,那么能够实行CONTINUE操作。

condition_value参数指明错误类型,该参数有多少个取值。sqlstate_value和mysql_error_code与规范定义中的是同3个乐趣。condition_name是DECLARE定义的准绳名称。SQLWA帕杰罗NING表示具有以0一开首的sqlstate_value值。NOT
FOUND表示具有以0二起首的sqlstate_value值。SQLEXCEPTION表示全体未有被SQLWASportageNING或NOT
FOUND捕获的sqlstate_value值。sp_statement表示一些积累进度或函数的推行语句。

【示例1四-7】 上面是概念管理程序的二种方法。代码如下:

  1. //方法一:捕获sqlstate_value  
  2. DECLARE CONTINUE HANDLER FOR SQLSTATE ’42S02′
    SET @info=’CAN NOT FIND’;  
  3. //方法二:捕获mysql_error_code  
  4. DECLARE CONTINUE HANDLER FOR 1146 SET @info=’CAN NOT FIND’;
     
  5. //方法三:先定义条件,然后调用  
  6. DECLARE  can_not_find  CONDITION  FOR  1146 ;  
  7. DECLARE CONTINUE HANDLER FOR can_not_find SET 
    @info=’CAN NOT FIND’;  
  8. //方法四:使用SQLWARNING  
  9. DECLARE EXIT HANDLER FOR SQLWARNING SET @info=’ERROR’;
     
  10. //方法五:使用NOT FOUND  
  11. DECLARE EXIT HANDLER FOR NOT FOUND SET @info=’CAN NOT FIND’;
     
  12. //方法六:使用SQLEXCEPTION  
  13. DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info=’ERROR’; 

上述代码是陆种概念处理程序的主意。第1种艺术是捕获sqlstate_value值。假如蒙受sqlstate_value值为4二S02,实行CONTINUE操作,并且输出”CAN
NOT
FIND”音信。第二种方法是捕获mysql_error_code值。借使越过mysql_error_code值为11四六,施行CONTINUE操作,并且输出”CAN
NOT
FIND”消息。第三种形式是先定义规则,然后再调用条件。这里先定义can_not_find条件,碰到11四陆破绽百出就实行CONTINUE操作。第各个方法是行使SQLWAEvoqueNING。SQLWASportageNING捕获全体以0一开始的sqlstate_value值,然后推行EXIT操作,并且输出”EMuranoRO福特Explorer”音信。第4种办法是接纳NOT
FOUND。NOT
FOUND捕获全部以0二上马的sqlstate_value值,然后实践EXIT操作,并且输出”CAN
NOT
FIND”音讯。第5种艺术是应用SQLEXCEPTION。SQLEXCEPTION捕获全部没有被SQLWA兰德途乐NING或NOT
FOUND捕获的sqlstate_value值,然后实施EXIT操作,并且输出”E帕杰罗RO奇骏”新闻。

====================================================

http://blog.sina.com.cn/s/blog\_52d20fbf0100ofd5.html

mysql存款和储蓄进程详解

1.      仓库储存进度简单介绍

 

咱俩常用的操作数据库语言SQL语句在进行的时候供给要先编写翻译,然后实行,而存款和储蓄进度(Stored
Procedure)是一组为了成功一定功用的SQL语句集,经编写翻译后存款和储蓄在数据库中,用户通过点名存款和储蓄进度的名字并加以参数(要是该存款和储蓄进度带有参数)来调用奉行它。

二个存款和储蓄进度是二个可编程的函数,它在数据库中开创并保存。它能够有SQL语句和部分区别经常的调节结构组成。当希望在分裂的应用程序或平台上执行同一的函数,或许封装特定功效时,存储进度是不行政管理用的。数据库中的存款和储蓄进程能够当作是对编制程序中面向对象方法的模拟。它同意调节数据的访问格局。

仓库储存进程一般有以下优点:

(一).存款和储蓄进度巩固了SQL语言的功效和灵活性。存款和储蓄进程可以用流动调查节语句编写,有很强的八面见光,能够实现复杂的论断和较复杂的演算。

(2).存款和储蓄进度允许标准组件是编制程序。存款和储蓄进度被创立后,能够在先后中被1再调用,而不要再次编辑该存款和储蓄进程的SQL语句。而且数据库专门的学问职员能够随时对存款和储蓄进度举办修改,对应用程序源代码毫无影响。

(③).存款和储蓄进度能落到实处相当的慢的实施进程。假设某一操作包蕴大量的Transaction-SQL代码或个别被一再实行,那么存款和储蓄进程要比批管理的实施进度快诸多。因为存款和储蓄进度是预编写翻译的。在第贰次运转3个存款和储蓄进度时查询,优化器对其进行分析优化,并且付诸最后被贮存在系统表中的试行安顿。而批管理的Transaction-SQL语句在每便运营时都要实行编写翻译和优化,速度相对要慢一些。

(四).存款和储蓄进度能过减少互连网流量。针对同一个数据库对象的操作(如查询、修改),借使那壹操作所关联的Transaction-SQL语句被集体程存款和储蓄进度,那么当在客户Computer上调用该存款和储蓄进程时,互联网中传递的只是该调用言语,从而大大增添了网络流量并降低了网络负载。

(伍).存款和储蓄进度可被当作一种安全部制来充足利用。系统一管理理员通过奉行某壹仓库储存进度的权位进行限制,能够落到实处对相应的数量的造访权限的范围,防止了非授权用户对数据的走访,保障了数量的安全。

 

2.      至于MySQL的存款和储蓄进度

积累进程是数据库存款和储蓄的3人命关天的效率,不过MySQL在5.0在先并不帮衬存款和储蓄进度,那使得MySQL在选择上大优惠扣。幸亏MySQL 伍.0算是初阶已经辅助存款和储蓄进度,这样即能够大大进步数据库的管理速度,同时也足以升高数据库编制程序的油滑。

3.      MySQL**积攒进程的创造**

 

(1). 格式

MySQL存款和储蓄进程创设的格式:CREATE
PROCEDURE 进程名 ([进度参数[,…]])
[特性 …] 过程体

那边先举个例证:
   

  1. mysql> DELIMITER //  
  2. mysql> CREATE PROCEDURE proc1(OUT s int)  
  3.     -> BEGIN 
  4.     -> SELECT COUNT(*) INTO s FROM user;  
  5.     -> END 
  6.     -> //  
  7. mysql> DELIMITER ; 

 

注:

(1)这里须要留意的是DELIMITE昂Cora //和DELIMITE奥迪Q5 ;两句,DELIMITELAND是分割符的意味,因为MySQL暗许以”;”为分隔符,尽管大家并未有评释分割符,那么编写翻译器会把囤积进程当成SQL语句进行管理,则存款和储蓄进程的编写翻译进程会报错,所以要事先用DELIMITE智跑关键字申明当前段分隔符,那样MySQL才会将”;”当做存款和储蓄进度中的代码,不会举办那些代码,用完了以后要把分隔符还原。

(2)存款和储蓄进度依据必要可能会有输入、输出、输入输出参数,这里有2个输出参数s,类型是int型,纵然有七个参数用”,”分割开。

(三)进程体的上马与结束使用BEGIN与END进行标志。

如此,我们的3个MySQL存款和储蓄进程就完了了,是否很轻巧吧?看不懂也没涉及,接下去,我们详细的讲授。

 

(2). 声称分割符

 

其实,关于证明分割符,上边包车型大巴疏解已经写得很掌握,没有要求多说,只是稍微要留意一点的是:要是是用MySQL的Administrator管理工科具时,能够直接创立,不再供给注解。

 

(3). 参数

MySQL存款和储蓄进程的参数用在积存进度的概念,共有二种参数类型,IN,OUT,INOUT,情势如:

CREATE PROCEDURE([[IN |OUT
|INOUT ] 参数名 数据类形…])

IN 输入参数:意味着该参数的值必须在调用存款和储蓄进程时钦点,在仓库储存进度中期维修改该参数的值不能够被重返,为暗中认可值

OUT 输出参数:该值可在存款和储蓄进程里面被退换,并可回到

INOUT 输入输出参数:调用时钦赐,并且可被更换和重回

Ⅰ. IN参数例子

创建:

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int)  
  3. -> BEGIN   
  4. -> SELECT p_in;   
  5. -> SET p_in=2;   
  6. -> SELECT p_in;   
  7. -> END;   
  8. -> //  
  9. mysql > DELIMITER ; 

施行结果:

  1. mysql > SET @p_in=1;  
  2. mysql > CALL demo_in_parameter(@p_in);  
  3. +——+  
  4. | p_in |  
  5. +——+  
  6. |   1  |   
  7. +——+  
  8.  
  9. +——+  
  10. | p_in |  
  11. +——+  
  12. |   2  |   
  13. +——+  
  14.  
  15. mysql> SELECT @p_in;  
  16. +——-+  
  17. | @p_in |  
  18. +——-+  
  19. |  1    |  
  20. +——-+  

以上能够见到,p_in固然在蕴藏进度中被修改,但并不影响@p_id的值

 

Ⅱ.OUT参数例子

创建:

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int)  
  3. -> BEGIN 
  4. -> SELECT p_out;  
  5. -> SET p_out=2;  
  6. -> SELECT p_out;  
  7. -> END;  
  8. -> //  
  9. mysql > DELIMITER ; 

推行结果:

  1. mysql > SET @p_out=1;  
  2. mysql > CALL sp_demo_out_parameter(@p_out);  
  3. +——-+  
  4. | p_out |   
  5. +——-+  
  6. | NULL  |   
  7. +——-+  
  8.  
  9. +——-+  
  10. | p_out |  
  11. +——-+  
  12. |   2   |   
  13. +——-+  
  14.  
  15. mysql> SELECT @p_out;  
  16. +——-+  
  17. | p_out |  
  18. +——-+  
  19. |   2   |  
  20. +——-+  

Ⅲ. INOUT参数例子

创建:

  1. mysql > DELIMITER //   
  2. mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int)
      
  3. -> BEGIN 
  4. -> SELECT p_inout;  
  5. -> SET p_inout=2;  
  6. -> SELECT p_inout;   
  7. -> END;  
  8. -> //   
  9. mysql > DELIMITER ; 

 

 

实行结果:

  1. mysql > SET @p_inout=1;
     
  2. mysql > CALL demo_inout_parameter(@p_inout) ;  
  3. +———+  
  4. | p_inout |  
  5. +———+  
  6. |    1    |  
  7. +———+  
  8.  
  9. +———+  
  10. | p_inout |   
  11. +———+  
  12. |    2    |  
  13. +———+  
  14.  
  15. mysql > SELECT @p_inout;  
  16. +———-+  
  17. | @p_inout |   
  18. +———-+  
  19. |    2     |  
  20. +———-+ 

(4). 变量

Ⅰ. 变量定义

DECLARE
variable_name [,variable_name…] datatype [DEFAULT value];

中间,datatype为MySQL的数据类型,如:int, float, date,
varchar(length)

例如:

  1. DECLARE l_int int unsigned default 4000000;  
  2. DECLARE l_numeric number(8,2) DEFAULT 9.95;  
  3. DECLARE l_date date DEFAULT ‘1999-12-31’;  
  4. DECLARE l_datetime datetime DEFAULT ‘1999-12-31 23:59:59’;  
  5. DECLARE l_varchar varchar(255) DEFAULT ‘This will not be padded’;   

 

 

Ⅱ. 变量赋值

 SET 变量名 = 表明式值 [,variable_name = expression
…]

 

Ⅲ. 用户变量

 

ⅰ. 在MySQL客户端选择用户变量

  1. mysql > SELECT ‘Hello World’ into @x;  
  2. mysql > SELECT @x;  
  3. +————-+  
  4. |   @x        |  
  5. +————-+  
  6. Hello World |  
  7. +————-+  
  8. mysql > SET @y=’Goodbye Cruel World’;  
  9. mysql > SELECT @y;  
  10. +———————+  
  11. |     @y              |  
  12. +———————+  
  13. | Goodbye Cruel World |  
  14. +———————+  
  15.  
  16. mysql > SET @z=1+2+3;  
  17. mysql > SELECT @z;  
  18. +——+  
  19. | @z   |  
  20. +——+  
  21. |  6   |  
  22. +——+  

ⅱ. 在积存进度中使用用户变量

  1. mysql > CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,’ World’);
     
  2. mysql > SET @greeting=’Hello’;  
  3. mysql > CALL GreetWorld( );  
  4. +—————————-+  
  5. | CONCAT(@greeting,’ World’) |  
  6. +—————————-+  
  7. |  Hello World               |  
  8. +—————————-+  

 

ⅲ. 在存款和储蓄过程间传递全局范围的用户变量

  1. mysql> CREATE PROCEDURE p1()   SET @last_procedure=’p1′;  
  2. mysql> CREATE PROCEDURE p2() SELECT CONCAT(‘Last procedure was ‘,@last_proc);
     
  3. mysql> CALL p1( );  
  4. mysql> CALL p2( );  
  5. +———————————————–+  
  6. | CONCAT(‘Last procedure was ‘,@last_proc  |  
  7. +———————————————–+  
  8. | Last procedure was p1                         |  
  9. +———————————————–+  

 

 

注意:

1用户变量名一般以@初阶

2滥用用户变量会导致程序难以驾驭及管制

 

(5). 注释

 

MySQL存款和储蓄进度可选拔三种风格的笺注

双模杠:–

该风格相似用来单行注释

c风格: 一般用来多行注释

例如:

 

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc一 –name存款和储蓄进程名  
  3. -> (IN parameter1 INTEGER)   
  4. -> BEGIN   
  5. -> DECLARE variable1 CHAR(10);   
  6. -> IF parameter1 = 17 THEN   
  7. -> SET variable1 = ‘birds’;   
  8. -> ELSE 
  9. -> SET variable1 = ‘beasts’;   
  10. -> END IF;   
  11. -> INSERT INTO table1 VALUES (variable1);  
  12. -> END   
  13. -> //  
  14. mysql > DELIMITER ;  

 

4.      MySQL**积攒进程的调用**

用call和您进度名以及三个括号,括号里面依照须求,参与参数,参数包括输入参数、输出参数、输入输出参数。具体的调用方法能够参见上面包车型客车事例。

5.      MySQL**积攒进度的询问**

大家像知道1个数据库上边有这一个表,大家一般选取show
tables;进行查看。那么大家要翻看有个别数据库上边包车型大巴存款和储蓄进程,是还是不是也能够运用呢?答案是,我们得以查看某些数据库上面包车型大巴储存进度,不过是令一钟形式。

大家得以用

select name from mysql.proc
where db=’数据库名’;

或者

select routine_name from
information_schema.routines where routine_schema=’数据库名’;

或者

show procedure status where
db=’数据库名’;

实行查询。

只要我们想清楚,有些存储进度的详实,那大家又该如何做啊?是还是不是也能够像操作表同样用describe 表名举行查看呢?

答案是:大家得以查看存款和储蓄进度的详细,不过必要用另一种办法:

SHOW CREATE
PROCEDURE 数据库.存储进度名;

就足以查看当前囤积过程的详实。

 

6.      MySQL**存款和储蓄进程的修改**

ALTER PROCEDURE

改换用CREATE
PROCEDURE 创设的预先钦点的贮存进度,其不会潜移默化相关存款和储蓄进度或存款和储蓄作用。

 

7.      MySQL**仓库储存进度的去除**

剔除3个储存进度相比简单,和删除表一样:

DROP
PROCEDURE

从MySQL的报表中删去二个或多个存款和储蓄进度。

 

8.      MySQL**储存进程的主宰语句**

(1). 变量功用域

其间的变量在其功能域范围内具备更加高的优先权,当施行到end。变量时,内部变量消失,此时早就在其效劳域外,变量不再可知了,应为在存款和储蓄
过程外再也不能够找到这几个发明的变量,可是你能够透过out参数恐怕将其值指派
给会话变量来保存其值。

 

 

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc3()  
  3.      -> begin 
  4.      -> declare x1 varchar(5) default ‘outer’;  
  5.      -> begin 
  6.      -> declare x1 varchar(5) default ‘inner’;  
  7.      -> select x1;  
  8.      -> end;  
  9.      -> select x1;  
  10.      -> end;  
  11.      -> //  
  12. mysql > DELIMITER ;  

 

 (2). 规范化语句

Ⅰ. if-then -else语句

 

 

 

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc2(IN parameter int)  
  3.      -> begin 
  4.      -> declare var int;  
  5.      -> set var=parameter+1;  
  6.      -> if var=0 then 
  7.      -> insert into t values(17);  
  8.      -> end if;  
  9.      -> if parameter=0 then 
  10.      -> update t set s1=s1+1;  
  11.      -> else 
  12.      -> update t set s1=s1+2;  
  13.      -> end if;  
  14.      -> end;  
  15.      -> //  
  16. mysql > DELIMITER ;  

Ⅱ. case语句: 

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc3 (in parameter int)  
  3.      -> begin 
  4.      -> declare var int;  
  5.      -> set var=parameter+1;  
  6.      -> case var  
  7.      -> when 0 then   
  8.      -> insert into t values(17);  
  9.      -> when 1 then   
  10.      -> insert into t values(18);  
  11.      -> else   
  12.      -> insert into t values(19);  
  13.      -> end case;  
  14.      -> end;  
  15.      -> //  
  16. mysql > DELIMITER ; 

 

(3). 循环语句

Ⅰ. while ···· end while:

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc4()  
  3.      -> begin 
  4.      -> declare var int;  
  5.      -> set var=0;  
  6.      -> while var<6 do  
  7.      -> insert into t values(var);  
  8.      -> set var=var+1;  
  9.      -> end while;  
  10.      -> end;  
  11.      -> //  
  12. mysql > DELIMITER ; 

 

 

Ⅱ. repeat···· end repeat:

它在推行操作后检查结果,而while则是施行前开始展览自己斟酌。

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc5 ()  
  3.      -> begin   
  4.      -> declare v int;  
  5.      -> set v=0;  
  6.      -> repeat  
  7.      -> insert into t values(v);  
  8.      -> set v=v+1;  
  9.      -> until v>=5  
  10.      -> end repeat;  
  11.      -> end;  
  12.      -> //  
  13. mysql > DELIMITER ;  

 

Ⅲ. loop ·····end loop:

loop循环无需初步标准,那一点和while 循环相似,同时和repeat循环一样无需收尾条件,
leave语句的含义是距离循环。

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc6 ()  
  3.      -> begin 
  4.      -> declare v int;  
  5.      -> set v=0;  
  6.      -> LOOP_LABLE:loop  
  7.      -> insert into t values(v);  
  8.      -> set v=v+1;  
  9.      -> if v >=5 then 
  10.      -> leave LOOP_LABLE;  
  11.      -> end if;  
  12.      -> end loop;  
  13.      -> end;  
  14.      -> //  
  15. mysql > DELIMITER ;  

 

 

Ⅳ. LABLES 标号:

标明能够用在begin repeat
while 可能loop 语句前,语句标号只可以在法定的说话前边使用。能够跳出循环,使运维指令到达复合语句的末段一步。

 

(4). ITERATE迭代

Ⅰ. ITERATE:

经过引用复合语句的标注,来从新先导复合语句

  1. mysql > DELIMITER //  
  2. mysql > CREATE PROCEDURE proc10 ()  
  3.      -> begin 
  4.      -> declare v int;  
  5.      -> set v=0;  
  6.      -> LOOP_LABLE:loop  
  7.      -> if v=3 then   
  8.      -> set v=v+1;  
  9.      -> ITERATE LOOP_LABLE;  
  10.      -> end if;  
  11.      -> insert into t values(v);  
  12.      -> set v=v+1;  
  13.      -> if v>=5 then 
  14.      -> leave LOOP_LABLE;  
  15.      -> end if;  
  16.      -> end loop;  
  17.      -> end;  
  18.      -> //  
  19. mysql > DELIMITER ; 

 

 

9.      MySQL**累积进度的宗旨函数**

 

(一).字符串类

CHA福特ExplorerSET(str)
//重返字串字符集
CONCAT
(string2 [,… ]) //连接字串
INSTCR-V(string ,substring ) //重临substring第一次在string中冒出的地点,不设有再次回到0
LCASE (string贰 ) //转变到小写
LEFT
(string二 ,length ) //从string第22中学的右侧起取length个字符
LENGTH
(string ) //string长度
LOAD_FILE
(file_name ) //从文件读取内容
LOCATE
(substring , string [,start_position ] ) 同INST奥迪Q3,但可指定开头地方
LPAD
(string2 ,length ,pad ) //重复用pad加在string先河,直到字串长度为length
LTCRUISERIM (string2 ) //去除前端空格
REPEAT
(string2 ,count ) //重复count次
REPLACE
(str ,search_str ,replace_str ) //在str中用replace_str替换search_str
RPAD (string贰 ,length ,pad) //在str后用pad补充,直到长度为length
RT兰德宝马X3IM (string② ) //去除后端空格
STTiggoCMP
(string一 ,string二 ) //逐字符相比较两字串大小,
SUBSTRING (str , position [,length ]) //从str的position开始,取length个字符,
注:mysql中拍卖字符串时,暗中认可第贰个字符下标为一,即参数position必须跨越等于1 

 

  1. mysql> select substring(‘abcd’,0,2);  
  2. +———————–+  
  3. | substring(‘abcd’,0,2) |  
  4. +———————–+  
  5. |                       |  
  6. +———————–+  
  7. 1 row in set (0.00 sec)  
  8.  
  9. mysql> select substring(‘abcd’,1,2);  
  10. +———————–+  
  11. | substring(‘abcd’,1,2) |  
  12. +———————–+  
  13. |     ab                |  
  14. +———————–+  
  15. 1 row in set (0.02 sec)  

TRIM([[BOTH|LEADING|TRAILING]
[padding] FROM]string二) //去除内定地方的钦赐字符
UCASE
(string2 ) //转变到大写
RIGHT(string2,length)
//取string2最后length个字符
SPACE(count)
//生成count个空格

(2).数学类

ABS (number2 )
//绝对值
BIN
(decimal_number ) //拾进制转二进制
CEILING
(number二 ) //向上取整
CONV(number2,from_base,to_base)
//进制转变
FLOO奥迪Q7(number贰 ) //向下取整
FORMAT
(number,decimal_places ) //保留小数位数
HEX
(DecimalNumber ) //转十陆进制
注:HEX()中可传唱字符串,则赶回其ASC-1壹码,如HEX(‘DEF’)再次回到4142143
也得以流传10进制整数,重临其十陆进制编码,如HEX(2伍)再次回到19
LEAST (number , number2 [,..]) //求最小值
MOD
(numerator ,denominator ) //求余
POWER
(number ,power ) //求指数
RAND([seed])
//随机数
ROUND
(number [,decimals ]) //四舍⑤入,decimals为小数位数]

注:再次回到类型并非均为整数,如:
(1)默许变为整形值

  1. mysql> select round(1.23);  
  2. +————-+  
  3. | round(1.23) |  
  4. +————-+  
  5. |           1 |  
  6. +————-+  
  7. 1 row in set (0.00 sec)  
  8.  
  9. mysql> select round(1.56);  
  10. +————-+  
  11. | round(1.56) |  
  12. +————-+  
  13. |           2 |  
  14. +————-+  
  15. 1 row in set (0.00 sec) 

(贰)可以设定小数位数,重临浮点型数据

  1. mysql> select round(1.567,2);
     
  2. +—————-+  
  3. | round(1.567,2) |  
  4. +—————-+  
  5. |           1.57 |  
  6. +—————-+  
  7. 1 row in set (0.00 sec) 

SIGN (number2 ) //

 

(三).日期时间类

ADDTIME (date2 ,time_interval ) //将time_interval加到date2
CONVERT_TZ (datetime贰 ,fromTZ ,toTZ ) //转换时区
CURRENT_DATE ( ) //当前几日期
CURRENT_TIME ( ) //当前时光
CURRENT_TIMESTAMP ( ) //当前时间戳
DATE (datetime ) //再次回到datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type )
//在date第22中学加上日期或时刻
DATE_FOLacrosseMAT (datetime ,FormatCodes )
//使用formatcodes格式展现datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date贰上减去三个时刻
DATEDIFF (date一 ,date二 ) //四个日子差
DAY (date ) //再次来到日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(一-7) ,一为礼拜三
DAYOFYEA智跑 (date ) //一年中的第几天
EXTRACT (interval_name FROM date ) //从date中领取日期的钦赐部分
MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串
MAKETIME (hour ,minute ,second ) //生成时间串
MONTHNAME (date ) //英文月份名
NOW ( ) //当前时光
SEC_TO_TIME (seconds ) //秒数转成时间
STR_TO_DATE (string ,format ) //字串转成时间,以format格式彰显
TIMEDIFF (datetime一 ,datetime二 ) //八个时间差
TIME_TO_SEC (time ) //时间转秒数]
WEEK (date_time [,start_of_week ]) //第几周
YEAR (datetime ) //年份
DAYOFMONTH(datetime) //月的第几天
HOUR(datetime) //小时
LAST_DAY(date) //date的月的终极日期
MICROSECOND(datetime) //微秒
MONTH(datetime) //月
MINUTE(datetime) //分再次回到符号,正负或0
SQRT(number2) //开平方

 

留下评论

网站地图xml地图