最近做一个项目的二次开发,用到了很多Mysql存储过程,目测至少5000行。在开发中有很多收获,所以把他记下来。
存储过程实际上把业务逻辑从应用程序转移到了数据库上。
如果数据库只是单纯的用把SQL语句放到应用程序里,实际上数据的流程是这样:
而使用存储过程后:
所以存储过程是把业务逻辑从应用程序转移到了数据库。
Mysql存储过程基础笔记:
1,Hello World!:
每当我们学习一门编程语言,都会先写个"Hello World!",虽然这看似简单,但只要能写出“Hello World”,你就会对这门语言的结构有了初步的认识,接着你就可以根据这个结构来进行深入学习。下面我们来写个Mysql 的Hello world .
#--Mysql默认的结束符为";",但存储过程里面很多语句会以";"结束,为了防止冲突,改成其他符号结束,我习惯用"$$"
DELIMITER $$
#--p_hello是存储过程的名字
CREATE PROCEDURE p_hello()
#--存储过程的程序代码体,以Begin...end标记结束和开始
BEGIN
SELECT "hello world!" ;
#--以"$$结束"
END$$
#--结束经修改过的默认结束符,即把"$$"变为";"
DELIMITER ;
#--执行存储过程
CALL p_hello() ;
执行结果:
2,1+1=2:在Mysql里参数由3部分组成:
[IN|OUT|INOUT] parameter_name parameter_type
即输入输出类型,参数名,参数类型
<pre code_snippet_id="513880" snippet_file_name="blog_20141110_2_454767" name="code" class="sql">DELIMITER $$
/*
--添加一个加法的存储过程,其中存储过程的参数的形式为:
--[IN|OUT|INOUT] parameter_name parameter_type
--其中:
--a和b是要输入的参数,c是计算后输出的参数
*/
CREATE PROCEDURE p_add(IN a INT , IN b INT , OUT c INT)
BEGIN
#--进行计算
SET c = a + b ;
END$$
DELIMITER ;
#--执行存储过程
#--a=1,b=1,c=@x,@x可以看成是一个变量,在计算完之后我们进行打印
CALL p_add(1,1,@x) ;
SELECT @x ;
执行结果: