建站软件 优化软件 编程软件 网页辅助 站群程序 网站程序 图像处理 资源教程 字体下载 推荐软件


您的位置:首页 > MYSQL学习 > mysql之存储过程认识

mysql之存储过程认识

时间:2015-05-26 19:50:30  来源:免费模板网 作者:风雪 阅读次数 tags存储过程

存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过程

MySQL存储过程

MySQL 5.0以后的版本开始支持存储过程,存储过程具有一致性、高效性、安全性和体系结构等特点,本节将通过具体的实例讲解PHP是如何操纵MySQL存储过程的。

实例261:存储过程的创建

实例说明

为了保证数据的完整性、一致性,提高应用的性能,常采用存储过程技术。MySQL 5.0之前的版本并不支持存储过程,随着MySQL技术的日趋完善,存储过程将在以后的项目中得到广泛的应用。本实例将介绍在MySQL 5.0以后的版本中创建存储过程。

技术要点

一个存储过程包括名字、参数列表,以及可以包括很多SQL语句的SQL语句集。下面为一个存储过程的定义过程:

create procedure proc_name (in parameter integer)
begin
declare variable varchar(20);
if parameter=1 then
set variable='MySQL';
else
set variable='PHP';
end if;
insert into tb (name) values (variable);
end;
MySQL中存储过程的建立以关键字create procedure开始,后面紧跟存储过程的名称和参数。MySQL的存储过程名称不区分大小写,例如PROCE1()和proce1()代表同一个存储过程名。存储过程名不能与MySQL数据库中的内建函数重名。

 

存储过程的参数一般由3部分组成。第一部分可以是in、out或inout。in表示向存储过程中传入参数;out表示向外传出参数;inout表示定义的参数可传入存储过程,并可以被存储过程修改后传出存储过程,存储过程默认为传入参数,所以参数in可以省略。第二部分为参数名。第三部分为参数的类型,该类型为MySQL数据库中所有可用的字段类型,如果有多个参数,参数之间可以用逗号进行分割。

MySQL存储过程的语句块以begin开始,以end结束。语句体中可以包含变量的声明、控制语句、SQL查询语句等。由于存储过程内部语句要以分号结束,所以在定义存储过程前应将语句结束标志“;”更改为其他字符,并且该字符在存储过程中出现的几率也应该较低,可以用关键字delimiter更改。例如:

mysql>delimiter //
存储过程创建之后,可用如下语句进行删除,参数proc_name指存储过程名。
drop procedure proc_name
实现过程

 

(1)MySQL存储过程是在“命令提示符”下创建的,所以首先应该打开“命令提示符”窗口。
(2)进入“命令提示符”窗口后,首先应该登录MySQL数据库服务器,在“命令提示符”下输入如下命令:

 

mysql –u用户名 –p用户密码
(3)更改语句结束符号,本实例将语句结束符更改为“//”。代码如下:

 

 

delimiter //
(4)创建存储过程前应首先选择某个数据库。代码如下:

 

 

use 数据库名
(5)创建存储过程。
(6)通过call语句调用存储过程。

 

举一反三

根据本实例,读者可以:

利用存储过程实现多表查询。
利用存储过程对商品信息进行降序输出。

实例262:使用存储过程实现用户注册

实例说明

在数据库系统开发过程中,如果能够应用存储过程,可以使整个系统的运行效率有明显的提高,本实例将向读者介绍MySQL 5.0版本中存储过程的创建以及PHP调用MySQL存储过程的方式。运行本实例前,首先应在“命令提示符”下创建如图9.13所示的存储过程,然后运行本实例,如图9.14所示,在图中的文本框中输入注册信息后,单击“注册”按钮,即可将用户填写的注册信息保存到数据库中,最终保存结果如图9.15所示。

 

图9.13 创建存储过程
图9.14 录入注册信息
图9.15 注册信息被存储到MySQL数据库

 

技术要点

本实例的关键技术是如何创建传入参数的存储过程,具体实现代码如下:

delimiter //
create procedure pro_reg (in nc varchar(50), in pwd varchar(50), 
in email varchar(50),in address varchar(50))
begin
insert into tb_reg (name, pwd ,email ,address) values (nc, pwd, email, address);
end;
//

“delimiter //”的作用是将语句结束符更改为“//”。
“in nc varchar(50)……in address varchar(50)”表示要向存储过程中传入的参数。

 

实现过程

(1)通过PHP预定义类mysqli,实现与MySQL数据库的连接。代码如下:

$conn=new mysqli("localhost","root","root","db_database09");
$conn->query("set names gb2312");

(2)调用存储过程pro_reg,实现将用户录入的注册信息保存到数据库。代码如下:
if($sql=$conn->query("call pro_reg('".$nc."','".$pwd."','".$email."','".$address."')"))
{
echo "<SCRIPT>alert('用户注册成功!');</SCRIPT>";
}
else
{
echo "<SCRIPT>alert('用户注册失败!');</SCRIPT>";
}

 

举一反三

根据本实例,读者可以:
在BBS论坛中,利用存储过程实现将用户所发帖子保存到数据库。
在学生信息管理系统中,利用存储过程删除指定的学生信息。

本文地址:https://www.freemoban.com/mysql/2015/0526/1950.html

猜你喜欢
栏目推荐
模板推荐

Copyright:www.freemoban.com 免费模板网 All Rights Reserved 网站备案:辽ICP备19014872号-2   辽公网安备 21010602000376号  辽公网安备:42900402000182号

免责声明:本站部分资源来自互联网收集,版权归原创者所有,如果侵犯了你的权益,我们会及时删除侵权内容,联系QQ:1615187561 谢谢合作!