mysql存储过程 mysql存储过程实例详解
老铁们,大家好,相信还有很多朋友对于mysql存储过程和mysql存储过程实例详解的相关问题不太懂,没关系,今天就由我来为大家分享分享mysql存储过程以及mysql存储过程实例详解的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!
mysql 存储过程 是什么意思
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。
存储过程通常有以下优点:
存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。
存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。
存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
MySQL存储过程创建的格式如下:
CREATE PROCEDURE过程名([过程参数[,...]])
[特性...]过程体
举例代码如下:
CREATEPROCEDUREproc1(OUTsint)
BEGIN
SELECTCOUNT(*)INTOsFROMuser;
END存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。
过程体的开始与结束使用BEGIN与END进行标识。
注意:MySQL在5.0以前并不支持存储过程
mysql中的存储过程是什么意思啊
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集
功能是将常用或复杂的工作,预先用SQL语句写好并用一个指定名称存储起来,以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用 call存储过程名字,即可自动完成命令。
存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,可由应用程序通过一个调用来执行,而且允许用户声明变量。
同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。
mysql存储过程的基本用法有哪些
mysql存储过程的基本用法有哪些
在外部程序访问数据库时(例如 PHP),要组织很多 SQL语句。
特别是业务逻辑复杂的时候,一大堆的 SQL和条件夹杂在 PHP代码中,让人不寒而栗。现在有了 MySQL存储过程,业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高。
一、MySQL创建存储过程
"pr_add"是个简单的 MySQL存储过程,这个MySQL存储过程有两个 int类型的输入参数"a"、"b",返回这两个参数的和。
复制代码代码如下:
drop procedure if exists pr_add;
计算两个数之和
复制代码代码如下:
create procedure pr_add
(
a int,
b int
)
begin
declare c int;
if a is null then
set a= 0;
end if;
if b is null then
set b= 0;
end if;
set c= a+ b;
select c as sum;
/*
return c;
不能在 MySQL存储过程中使用。return只能出现在函数中。
*/
end;
二、调用 MySQL存储过程
复制代码代码如下:
call pr_add(10, 20);
执行 MySQL存储过程,存储过程参数为 MySQL用户变量。
复制代码代码如下:
set@a= 10;
set@b= 20;
call pr_add(@a,@b);
三、MySQL存储过程特点
创建 MySQL存储过程的简单语法为:
复制代码代码如下:
create procedure存储过程名字()
(
[in|out|inout]参数 datatype
)
begin
MySQL语句;
end;
MySQL存储过程参数如果不显式指定"in"、"out"、"inout",则默认为"in"。习惯上,对于是"in"的参数,我们都不会显式指定。
1. MySQL存储过程名字后面的"()"是必须的,即使没有一个参数,也需要"()"
2. MySQL存储过程参数,不能在参数名称前加"@",如:"@a int"。下面的创建存储过程语法在 MySQL中是错误的(在 SQL Server中是正确的)。 MySQL存储过程中的变量,不需要在变量名字前加"@",虽然 MySQL客户端用户变量要加个"@"。
复制代码代码如下:
create procedure pr_add
(
@a int,--错误
b int--正确
)
3. MySQL存储过程的参数不能指定默认值。
4. MySQL存储过程不需要在 procedure body前面加"as"。而 SQL Server存储过程必须加"as"关键字。
复制代码代码如下:
create procedure pr_add
(
a int,
b int
)
as--错误,MySQL不需要"as"
begin
mysql statement...;
end;
5.如果 MySQL存储过程中包含多条 MySQL语句,则需要 begin end关键字。
复制代码代码如下:
create procedure pr_add
(
a int,
b int
)
begin
mysql statement 1...;
mysql statement 2...;
end;
6. MySQL存储过程中的每条语句的末尾,都要加上分号";"
复制代码代码如下:
...
declare c int;
if a is null then
set a= 0;
end if;
...
end;
7. MySQL存储过程中的注释。
复制代码代码如下:
/*
这是个
多行 MySQL注释。
*/
declare c int;--这是单行 MySQL注释(注意--后至少要有一个空格)
if a is null then#这也是个单行 MySQL注释
set a= 0;
end if;
END,本文到此结束,如果可以帮助到大家,还望关注本站哦!