2.2 第一个储存过程 开始,我们将创建一些非常简单的储存过程,你将需要一个编辑环境来写储存过程,还有一些工具把你的储存过程请求发送给MySQL服务器。
你可以使用任何文本编辑器,下面提供了一些MySQL的代码提交工具:
- MySQL命令行客户端
- MySQL Query Browser
- 第三方工具,例如Toad for MySQL
在这片文章中,我们假定你没有安装任何工具,所以我们是用了古老却又经典的MySQL命令行客户端。
让我们用root帐户登录localhost的3306端口,我们将在Example 2-1使用MySQL预安装的“test”数据库。
Example 2-1 连接MySQL命令行客户端- [gharriso@guyh-rh4-vm2 ~]$mysql -uroot -psecret -hlocalhost
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 1 to server version: 5.0.16-nightly-20051017-log
- Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
- mysql>
复制代码
2.2.1 创建储存过程 你可以用CREATE PROCEDURE , CREATE FUNCTION ,或者CREATE TRIGGER 表达式来创建储存程序。可以直接把这些表达式直接输入MySQL命令行,但是对于一般的储存程序大小而言,这有些不太实际,所以我们建议你使用文本编辑器创建一个文本文件来容纳我们的储存程序,然后我们就可以使用命令行客户端和其他工具来递交这个文件。
我们将使用MySQL Query Browser作为文本编辑器,如果你没有这个工具,你可以从http://dev.mysql.com/downloads/得到,你也可以使用任何操作系统上的编辑器例如vi, emacs或者notepad,当然我们喜欢MySQL Query Browser的原因是它具备内建的帮助系统,语法高亮,执行SQL表达式的能力以及其他一些功能。
遵照下面的步骤
- 运行MySQL Query Browser,在Windows上,从开始菜单中选择程序->MySQL->MySQL Query Browser。在Linux上从终端中输入mysql-query-browser
- 从菜单中选择File->New Script tab来创建一个空白的脚本窗口
- 输入你的储存程序代码
Figure 2-1 显示了我们的第一个储存过程:
我们可以使用File->Sava As菜单来把我们的文件保存,这样就可以用mysql客户端来执行它
Figure 2-1 第一个储存程序

第一个储存过程非常的简单,但是还是让我们一行行的来解释确保你能够完整的理解他们
行号
| 解释
| 1
| DELIMITER命令确保把‘$$’作为表达式的终结条件,通常,MySQL会把“;”作为表达式的终结,但是因为储存过程在其过程体中
| 3
| DROP PROCEDURE IF EXISTS表达式用来确保在同名储存过程已经存在的情况下将其移除,如果我们不这样做,那么在同名储存过程已存在的情况下将收到一个MySQL的修改重复执行的错误
| 4
| CREATE PROCEDURE表达式指示一个储存过程定义的开始,注意,储存过程名“HelloWorld”的后面跟这一对内容为空的圆括号“(
)”。如果储存过程有任何参数,那么我们就可以把参数放在里面。但是如果没有参数,我们同样要把圆括号放上,否则,我们将会收到一个语法错误
| 5
| BEGIN表达式指示了储存程序的开始,所有超过一个表达式的储存程序必须用至少一个BEGIN-END块来定义储存程序的开始和结束
| 6
| 这是储存过程中的一个单个表达式:一个SELECT表达式将“Hello World”返回给它的调用程序,马上将像我们看到的一样,储存程序中的SELECT能够向控制台和调用程序返回数据,就像我们直接把SELECT表达式输入MySQL命令行一样
| 7
| END结束储存过程的定义。注意用$$来结束对储存过程的定义,这样MySQL就知道我们完整的结束了CREATE PROCEDURE表达式
|
随着对储存过程的定义结束,我们可以用mysql客户端创建并执行我们的HelloWorld储存过程,就像Example 2-2所展示的那样:
Example 2-2. 创建我们第一个储存过程
- $ mysql -uroot -psecret -Dprod
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 16 to server version: 5.0.18-nightly-20051208-log
- Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
- mysql> SOURCE HelloWorld.sql
- Query OK, 0 rows affected, 1 warning (0.01 sec)
- Query OK, 0 rows affected (0.00 sec)
- mysql> CALL HelloWorld( ) $$
- +-------------+
- | Hello World |
- +-------------+
- | Hello World |
- +-------------+
- 1 row in set (0.01 sec)
- Query OK, 0 rows affected (0.01 sec)
- mysql>
复制代码 下面是我们用于完成这一切MySQL命令的解释:
命令
| 解释
| SOURCE HelloWorld.sql
| 从指定的文件中读取命令,在这个例子中,我们用MySQL Query Browser制定了我们所保存的文件,没有错误返回,这说明我们已经成功的创建了储存过程
| CALL HelloWorld( ) $$
| 执行储存过程,我们成功的执行了储存过程并且返回了“Hello World”作为结果集。我们用‘$$’来作为CALL命令的终结,这是因为DELIMITER的设置仍然在起作用
|
2.2.2 用MySQL Query Browser创建储存过程 在这个指南以及整本书中,我们要用一些过时的工具–MySQL命令行终端创建大多数的储存程序代码示例。而你要做的仅仅是复制这些代码片段。因此,你可以是用一些图形化的工具来创建储存程序:网上有大量使用的第三方MySQL图形化工具,其中一个很好的选择是MySQL Query Browser,你可以在此得到http://dev.mysql.com/downloads/
在这一章节中我们将给出如何是用MySQL Query Browser创建储存过程,MySQL Query Browser对于创建储存过程更为友好,虽然目前为止并非所有的操作系统平台都支持这一工具,所以你可以使用MySQL命令行或者其他第三方工具来代替
在Windows上,从开始菜单中选择程序->MySQL->MySQL Query Browser。在Linux上从终端中输入mysql-query-browser
当查询工具被打开,它会提示你输入MySQL服务器的连接信息,然后将显示一个空白的图形化窗口。你可以使用菜单项Script->Create Stored Procedure/Function菜单创建储存程序,它会提示你按照名称来创建储存程序,然后会显示一个空白的储存程序模板Figure 2-2显示了这样一个模板的例子:
Figure 2-2用MySQL Query Browser创建储存过程
你可以在适当的位置储存过程代码(在BEGIN和END表达式之间,光标将被自动的置于合适的位置方便你的输入)。当你输入完成,你可以简单的按下Execute按钮来执行储存过程,如果你的代码发生了错误,Query Browser将在底部显示错误并用高亮标识发生错误的行,否则,你将在左侧的Schemata选项卡中发现你的储存过程已被成功的创建
Figure 2-3用Execute按钮执行储存程序
我们希望这个清晰的示例对于你用MySQL Query Browser创建和执行储存程序起到帮助,Query Browser提供了一个简便的储存程序开发环境,但这一切都取决于你如何使用Query Browser,第三方工具和你喜欢的编辑器及MySQL命令行终端。 |