MySQL数据库新特性之存储过程入门教程 (mysql数据类型)

教程大全 2025-07-17 23:37:15 浏览

在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部分中,是存储过程的主体部分。

mysql数据类型

3 调用存储过程的方法

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

4 修改和删除存储过程

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


mysql 4层树形菜单查询存储过程怎么写

查看存储过程创建语句可运行下列SQL语句:语法SHOW create {procedure|function} sp_name;例如查看存储过程myPro的创建语句show create procedure myPro;查看自定义函数myFunc的创建语句show create function myFunc;

sql存储过程的执行

执行带参数的存储过程的方法如下:Exec sp_configure allow upDates,1--允许更新系统表。 exec _ChangeObjectOwnerBatch OldOwner,dbo以上是两个例子。 SQL Server中执行带参数的存储过程的方法是:EXEC 存储过程名字 参数1,参数2,数值参数EXEC 是一个关键字。 字符串参数使用单引号括起来,数值参数不需要使用单引号

mysql 使用存储过程 循环查找数据

delimiter $$mysql>mysql> CREATE PROCEDURE myProc() //创建2113while循环的存储5261过程 if分支4102语1653句示例-> BEGIN->-> DECLARE i int;-> SET i=1;-> loop1: WHILE i<=10 DO-> IF MOD(i,2)<>0 THEN /*Even number - try again*/-> SELECT CONCAT(i, is an odd number);-> END IF;-> SET i=i+1;-> END WHILE loop1;-> END$$Query OK, 0 rows affected (0.00 sec)这种回也可以答

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐