1、关于MySQL的存储过程
存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
2、MySQL存储过程的创建
(1).格式
MySQL存储过程创建的格式:CREATE PROCEDURE过程名([过程参数[,...]]) procedure
[特性...]过程体
这里先举个例子:
1. mysql>DELIMITER//
2. mysql>CREATEPROCEDUREproc1(OUTsint)
3. ->BEGIN
4. ->SELECTCOUNT(*)INTOsFROMuser;
5. ->END
6. ->//
7. mysql>DELIMITER;
注:
(1)这里需要注意的是DELIMITER //和DELIMITER ;两句,DELIMITER是分割符的意思,因为MySQL默认以";"为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
(2)存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。
(3)过程体的开始与结束使用BEGIN与END进行标识。
这样,我们的一个MySQL存储过程就完成了,是不是很容易呢?看不懂也没关系,接下来,我们详细的讲解。
(2).声明分割符
其实,关于声明分割符,上面的注解已经写得很清楚,不需要多说,只是稍微要注意一点的是:如果是用MySQL的Administrator管理工具时,可以直接创建,不再需要声明。
(3).参数
MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:
CREATE PROCEDURE([[IN |OUT |INOUT ]参数名数据类形...])
IN输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT输出参数:该值可在存储过程内部被改变,并可返回
INOUT输入输出参数:调用时指定,并且可被改变和返回
Ⅰ. IN参数例子
创建:
1. mysql>DELIMITER//
2. mysql>CREATEPROCEDUREdemo_in_parameter(INp_inint)
3. ->BEGIN
4. ->SELECTp_in;/*查询输入参数*/
5. ->SETp_in=2;/*修改*/
6. ->SELECTp_in;/*查看修改后的值*/
7. ->END;
8. ->//
9. mysql>DELIMITER;
执行结果:
1. mysql>SET@p_in=1;
2. mysql>CALLdemo_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>CREATEPROCEDUREdemo_out_parameter(OUTp_outint)
3. ->BEGIN
4. ->SELECTp_out;/*查看输出参数*/
5. ->SETp_out=2;/*修改参数值*/
6. ->SELECTp_out;/*看看有否变化*/
7. ->END;
8. ->//
9. mysql>DELIMITER;
执行结果:
1. mysql>SET@p_out=1;
2. mysql>CALLsp_demo_out_parameter(@p_out);
3. +-------+
4. |p_out|
5. +-------+
6. |NULL|
7. +-------+
8. /*未被定义,返回NULL*/
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>CREATEPROCEDUREdemo_inout_parameter(INOUTp_inoutint)
3. ->BEGIN
4. ->SELECTp_inout;
5. ->SETp_inout=2;
6. ->SELECTp_inout;
7. ->END;
8. ->//
9. mysql>DELIMITER;
执行结果:
1. mysql>SET@p_inout=1;
2. mysql>CALLdemo_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. DECLAREl_intintunsigneddefault4000000;
2. DECLAREl_numericnumber(8,2)DEFAULT9.95;
3. DECLAREl_datedateDEFAULT'1999-12-31';
4. DECLAREl_datetimedatetimeDEFAULT'1999-12-3123:59:59';
5. DECLAREl_varcharvarchar(255)DEFAULT'Thiswillnotbepadded';
Ⅱ.变量赋值
SET变量名=表达式值[,variable_name = expression ...]
Ⅲ.用户变量
ⅰ.在MySQL客户端使用用户变量
1. mysql>SELECT'HelloWorld'into@x;
2. mysql>SELECT@x;
3. +-------------+
4. |@x|
5. +-------------+
6. |HelloWorld|
7. +-------------+
8. mysql>SET@y='GoodbyeCruelWorld';
9. mysql>SELECT@y;
10.+---------------------+
11.|@y|
12.+---------------------+
13.|GoodbyeCruelWorld|
14.+---------------------+
15.
16.mysql>SET@z=1+2+3;
17.mysql>SELECT@z;
18.+------+
19.|@z|
20.+------+
21.|6|
22.+------+
ⅱ.在存储过程中使用用户变量
1. mysql>CREATEPROCEDUREGreetWorld()SELECTCONCAT(@greeting,'World');
2. mysql>SET@greeting='Hello';
3. mysql>CALLGreetWorld();
4. +----------------------------+
5. |CONCAT(@greeting,'World')|
6. +----------------------------+
7. |HelloWorld|
8. +----------------------------+
ⅲ.在存储过程间传递全局范围的用户变量
1. mysql>CREATEPROCEDUREp1()SET@last_procedure='p1';
2. mysql>CREATEPROCEDUREp2()SELECTCONCAT('Lastprocedurewas',@last_procedure);
3. mysql>CALLp1();
4. mysql>CALLp2();
5. +-----------------------------------------------+
6. |CONCAT('Lastprocedurewas',@last_proc |
7. +-----------------------------------------------+
8. |Lastprocedurewasp1|
9. +-----------------------------------------------+
注意:
①用户变量名一般以@开头
②滥用用户变量会导致程序难以理解及管理
分享到:
相关推荐
本文实例讲述了mysql存储过程之返回多个值的方法。分享给大家供大家参考,具体如下: mysql存储函数只返回一个值。要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程。咱们先来看一个orders表它的...
Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三种循环等等) Mysql存储过程常用语句模板(含变量,if,三...
mysql经典教程+mysql存储过程讲解 重点讲解Mysql的存储过程,触发器,游标的使用 对mysql不太熟的朋友可以好好学习。。。
c++实现调mysql存储过程,实现存储过程的出参入参,可以支持查询多数据返回,还有存储过程的复杂数据的增删改等
mysql存储过程实现分页 mysql存储过程实现分页 mysql存储过程实现分页 mysql存储过程实现分页
本文实例讲述了MySQL存储过程的异常处理方法。分享给大家供大家参考。具体如下: mysql> mysql> delimiter $$ mysql> mysql> CREATE PROCEDURE myProc -> (p_first_name VARCHAR(30), -> p_last_name VARCHAR(30)...
MySQL存储过程学习 MySQL存储过程 MySQL存储过程
mysql 存储过程 实战
mysql存储过程ppt
mysql获取两个时间相差年月日:使用mysql存储过程,实现计算两个时间的差值,并用年月日时分秒的格式输出,且从大到小为0时则不展示对应单位(如:相差1小时20秒 则展示'1时0分20秒')
mysql存储过程,存储函数练习,里面有详细代码,供大家参考
MySQL存储过程
MySQL存储过程编程 可以看看 数据库 存储过程
php中调用MySQL存储过程示例
MySQL存储过程,入门简单,循序渐进,很适合自学,很详尽,很好学。
mysql存储过程调试工具,可以设置断点,方便查看变量信息等。好用,简单
给了一个小的mysql 存储过程的例子。同时给出了一个在pb9中调用的例子.本例子是给出的mysql8.0的存储过程。对于5.7一下的现在odbc很难有支持
MySQL存储过程实例教程,MySQL存储过程实例教程
mysql存储过程实例详细介绍了mysql存储过程的开发步骤