[field:fulltitle/]

中国IT网 > 互动 > 教程 > 正文

MySQL数据库新特性之存储过程入门教程(1)
2014-05-14 18:20  网络整理    我要评论

在MYSQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL 的数据库处理能力,在本文中,将指导读者快速掌握MYSQL 5的存储过程的基本知识,带领用户入门。

存储过程介绍

存储过程是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量 。同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。

存储过程的特点

作为存储过程,有以下这些优点:

(1)减少网络通信量。调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL语句,那么其性能绝对比一条一条的调用SQL语句要高得多。

(2)执行速度更快。存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接中读取。

(3)更强的安全性。存储过程是通过向用户授予权限(而不是基于表),它们可以提供对特定数据的访问,提高代码安全,比如防止 SQL注入。

(4) 业务逻辑可以封装存储过程中,这样不仅容易维护,而且执行效率也高

当然存储过程也有一些缺点,比如:

1 可移植性方面:当从一种数据库迁移到另外一种数据库时,不少的存储过程的编写要进行部分修改。

2 存储过程需要花费一定的学习时间去学习,比如学习其语法等。

在MYSQL中,推荐使用MYSQL Query Browswer()这个工具去进行存储过程的开发和管理。

下面分步骤来学习MYSQL中的存储过程。

1 定义存储过程的结束符

在存储过程中,通常要输入很多SQL语句,而SQL语句中每个语句以分号来结束,因此要告诉存储过程,什么位置是意味着整个存储过程结束,所以我们在编写存储过程前,先定义分隔符,我们这里定义“//”为分隔符,我们使用DELIMITER //这样的语法,就可以定义结束符了,当然你可以自己定义其他喜欢的符号。

2 如何创建存储过程

下面先看下一个简单的例子,代码如下:

下面讲解下存储过程的组成部分:

1)首先在定义好终结符后,使用CREATE PROCEDURE+存储过程名的方法创建存储过程,LANGUAGE选项指定了使用的语言,这里默认是使用SQL。

2)DETERMINISTIC关键词的作用是,当确定每次的存储过程的输入和输出都是相同的内容时,可以使用该关键词,否则默认为NOT DETERMINISTIC。

3) SQL SECURITY关键词,是表示调用时检查用户的权限。当值为INVOKER时,表示是用户调用该存储过程时检查,默认为DEFINER,即创建存储过程时检查。

4) COMMENT部分是存储过程的注释说明部分。

5)在BEGIN END部分中,是存储过程的主体部分。

3 调用存储过程的方法

调用存储过程的方法很简单,只需要使用call命令即可,后面跟要调用存储过程的名称及输入的变量列表,比如:

4 修改和删除存储过程

可以用ALTER的语法去修改存储过程的主要特征和参数,要修改其存储过程的主体部分的话,必须要先删除然后再重建。比如下面修改存储过程num_from_employee的定义。将读写权限改为MODIFIES SQL DATA,并指明调用者可以执行。代码执行如下:

  • MODIFIES SQL DATA SQL SECURITY INVOKER ; 
  • 而删除存储过程的语法为使用DROP关键词即可。如下

  • 1