MySQL必知必会01_使用存储过程

1.什么是存储过程

存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。存储存储过程 是一段代码(过程),存储在数据库中的SQL组成。一个存储过程通常用于完成一段业务逻辑,例如报名,交班费,订单入库等。

2.优劣

优势

(1)通过把处理封装在容易使用的单元中,简化复杂的操作 由于不要求反复建立一系列处理步骤,这保证了数据的完整性。
如果所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码都是相同的。这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性。
(2)简化对变动的管理。如果表名、列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。这一点的延伸就是安全性。通过存储过程限制对基础数据的访问减少了数据讹误(无意识的或别的原因所导致的数据讹误)的机会。
(3)提高性能。因为使用存储过程比使用单独的SQL语句要快。 存在一些只能用在单个请求中的MySQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码(在下一章的例子中可以看到。)
换句话说,使用存储过程有3个主要的好处,即简单、安全、高性能。

劣势:

一般来说,存储过程的编写比基本SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验
你可能没有创建存储过程的安全访问权限。许多数据库管理员限制存储过程的创建权限,允许用户使用存储过程,但不允许他们创建存储过程。
MySQL将编写存储过程的安全和访问与执行存储过程的安全和访问区分开来。这是好事情。即使你不能(或不想)编写自己的存储过程,也仍然可以在适当的时候执行别的存储过程。

3.执行存储过程

MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为CALL。CALL接受存储过程的名字以及需要传递给它的任意参数
MySQL必知必会01_使用存储过程_第1张图片

4.创建存储过程

MySQL必知必会01_使用存储过程_第2张图片
在MySQL处理这段代码时,它创建一个新的存储过程productpricing。没有返回数据,因为这段代码并未调用存储过程,这里只是为以后使用而创建它。
MySQL必知必会01_使用存储过程_第3张图片

5.分隔符问题

delimiter //        -- 代表使用//作为语句的结束符

delimiter $$       -- 代表使用两个$符号作为结束符

默认的MySQL语句分隔符为;(正如你已经在迄今为止所使用的MySQL语句中所看到的那样)。
存储过程是sql语句,所以结尾原则上应该用分号;结尾,然而存储过程中也会出现sql语句,他们也是用;结尾,这会使存储过程中的SQL出现句法错误。
解决办法是临时更改命令行实用程序的语句分隔符,如下所示:
MySQL必知必会01_使用存储过程_第4张图片
其中,DELIMITER //告诉命令行实用程序使用//作为新的语句结束分隔符,可以看到标志存储过程结束的END定义为END//而不是END;。这样,存储过程体内的;仍然保持不动,并且正确地传递给数据库引擎。最后,为恢复为原来的语句分隔符,

【案例】


5.删除存储过程

存储过程在创建之后,被保存在服务器上以供使用,直至被删除。删除命令从服务器中删除存储过程。为删除刚创建的存储过程,可使用以下语句:
MySQL必知必会01_使用存储过程_第5张图片

6.使用参数

productpricing只是一个简单的存储过程,它简单地显示SELECT语句的结果。一般,存储过程并不显示结果,而是把结果返回给你指定的变量。变量(variable)是内存中一个特定的位置,用来临时存储数据。

(1)基本语法

以下是productpricing的修改版本(如果不先删除此存储过程,则不能再次创建它):

MySQL必知必会01_使用存储过程_第6张图片

(2)数据类型

MySQL必知必会01_使用存储过程_第7张图片

(3)调用

调用的时候必须指定3个变量名
MySQL必知必会01_使用存储过程_第8张图片
【注意】
在调用时这条语句不显示任何数据。他返回以后可以显示(或者在其他处理中使用)的变量

7.建立智能存储过程

8.

你可能感兴趣的:(MySQL)