Starting the MySQL Client 启动MySQL客户端
这是我启动mysql客户端的方式。您也许会使用其他方式,假如您使用的是二进制版本或是Windows系统的电脑,您可能会在其他子目录下运行以下程式:
easy@phpv:~> /usr/local/mysql/bin/mysql --user=root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 5.0.3-alpha-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
在演示中,我将会展示以root身份登陆后的mysql客户端返回的结果,这样意味着我有极大的特权。
Check for the Correct Version 核对版本
为了确认使用的MySQL的版本是正确的,我们要查询版本。我有两种方法确认我使用的是5.0版本:
SHOW VARIABLES LIKE 'version';
or
SELECT VERSION();
例如:
mysql> SHOW VARIABLES LIKE 'version';
--------------- -------------------
| Variable_name | Value |
--------------- -------------------
| version | 5.0.3-alpha-debug |
--------------- -------------------
1 row in set (0.00 sec)
mysql> SELECT VERSION();
-------------------
| VERSION() |
-------------------
| 5.0.3-alpha-debug |
-------------------
1 row in set (0.00 sec)
当看见数字'5.0.x' 后就能够确认存储过程能够在这个客户端上正常工作。
The Sample "Database" 示例数据库
现在要做的第一件事是创建一个新的数据库然后设定为默认数据库实现这个步骤的SQL语句如下:
CREATE DATABASE db5;
USE db5;
例如:
mysql> CREATE DATABASE db5;
Query OK, 1 row affected (0.00 sec)
mysql> USE db5;
Database changed
在这里要避免使用有重要数据的实际的数据库然后我们创建一个简单的工作表。
实现这个步骤的SQL语句如下:
mysql> CREATE DATABASE db5;
Query OK, 1 row affected (0.01 sec)
mysql> USE db5;
Database changed
mysql> CREATE TABLE t (s1 INT);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO t VALUES (5);
Query OK, 1 row affected (0.00 sec)
您会发现我只在表中插入了一列。这样做的原因是我要保持表的简单,因为在这里并无需展示查询数据的技巧,而是教授存储过程,无需使用大的数据表,因为他本身已够复杂了。
这就是示例数据库,我们将从这个名字为t的只包含一列的表开始Pick a Delimiter 选择分隔符
现在我们需要一个分隔符,实现这个步骤的SQL语句如下:
DELIMITER //
例如:
mysql> DELIMITER //
分隔符是您通知mysql客户端您已完成输入一个SQL语句的字符或字符串符号。一直以来我们都使用分号“;”,但在存储过程中,这会产生不少问题,因为存储过程中有许多语句,所以每一个都需要一个分号因此您需要选择一个不太可能出现在您的语句或程式中的字符串作为分隔符。我曾用过双斜杠“//”,也有人用竖线“|”。我曾见过在DB2程式中使用“@”符号的,但我不喜欢这样。您能够根据自己的喜好来选择,但是在这个课程中为了更容易理解,您最好选择跟我相同。假如以后要恢复使用“;”(分号)作为分隔符,输入下面语句就能够了:
"DELIMITER ;//".
CREATE PROCEDURE Example 创建程式实例
CREATE PROCEDURE p1 () SELECT * FROM t; //
也许这是您使用Mysql创建的第一个存储过程。假如是这样的话,最好在您的日记中记下这个重要的里程碑。
CREATE PROCEDURE p1 () SELECT * FROM t; // <--
SQL语句存储过程的第一部分是“CREATE PROCEDURE”:
CREATE PROCEDURE p1 () SELECT * FROM t; // <--
第二部分是过程名,上面新存储过程的名字是p1。
Digression: Legal Identifiers 题外话:合法标识符的问题
存储过程名对大小写不敏感,因此‘P1’和‘p1’是同一个名字,在同一个数据库中您将不能给两个存储过程取相同的名字,因为这样将会导致重载。某些DBMS允许重载(Oracle支持),但是MySQL不支持(译者话:希望以后会支持吧。)。
您能够采取“数据库名.存储过程名”这样的折中方法,如“db5.p1”。存储过程名能够分开,他能够包括空格符,其长度限制为64个字符,但注意不要使用MySQL内建函数的名字,假如这样做了,在调用时将会出现下面的情况:
mysql> CALL pi();
Error 1064 (42000): You have a syntax error.
mysql> CALL pi ();
Error 1305 (42000): PROCEDURE does not exist.
在上面的第一个例子里,我调用的是个名字叫pi的函数,但您必须在调用的函数名后加上空格,就像第二个例子那样。
CREATE PROCEDURE p1 () SELECT * FROM t; // <--
其中“()”是“参数列表”。
CREATE PROCEDURE
语句的第三部分是参数列表。通常需要在括号内添加参数。例子中的存储过程没有参数,因此参数列表是空的—所以我只需要键入空括号,然而这是必须的。
CREATE PROCEDURE p1 () SELECT * FROM t; // <--
"SELECT * FROM t;"
是存储过程的主体。
然后到了语句的最后一个部分了,他是存储过程的主体,是一般的SQL语句。过程体中语句
"SELECT * FROM t;"
包含一个分号,假如后面有语句结束符号(//)时能够不写这个分号。
假如您还记得我把这部分叫做程式的主体将会是件好事,因为(body)这个词是大家使用的技术上的术语。通常我们不会将SELECT语句用在存储过程中,这里只是为了演示。所以使用这样的语句,能在调用时更好的看出程式是否正常工作。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




