MySQL 5.0新特点教程 存储历程[MySQL防范]
本文“MySQL 5.0新特点教程 存储历程[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Introduction 简介
MySQL 5.0 新特点教程是为需求理解5.0版本新特点的MySQL老用户而写的.简单的来说是介绍了"存储历程、触发器、视图、信息架构视图",在此感激译者陈朋奕的勤奋.但愿这本书能像熟行专家那样与您举行对话,用简单的问题、例子让你学到需求的知识.为了到达这样的目的,我会从每一个细节开始渐渐的为大家成立概念,最后会给大家展示较大的实用例,在学习之前大概大家会认为这个用例很难,但是只要随着课程去学,相信很快就可以掌握.
Conventions and Styles 约定和编程气势
每次我想要演示实际代码时,我会对mysql客户端的屏幕就呈现的代码举行调整,将字体改成Courier,使他们看起来与普通文本不一样.
在这里举个例子:mysql> DROP FUNCTION f;Query OK, 0 rows affected (0.00 sec)
假照实例对比大,则需求在某些行和段落间加注释,同时我会用将" <--"标记放在页面的右边以表示夸大.
比方:
mysql> CREATE PROCEDURE p ()-> BEGIN/* This procedure does nothing */ <---> END;//Query OK, 0 rows affected (0.00 sec)
有时刻我会将例子中的"mysql> "和"-> "这些系统显示去掉,你可以直接将代码复制到mysql客户端程序中(假如你目前所读的不是电子版的,可以在mysql.com网站下载相关脚本)所以的例子都已经在Suse 9.2 Linux、Mysql 5.0.3大众版上测试通过.
在您阅读本书的时刻,Mysql已经有更高的版本,同时能支持更多OS了,包含Windows,Sparc,HP-UX.因此这里的例子将能正常的运行在您的电脑上.但假如运行仍旧呈现弊端,可以咨询你熟习的资深Mysql用户,以得到长期的支持和帮忙.
所以存储历程是可复用的组件!想象一下假如你改变了主机的语言,这对存储历程不会产生影响,因为它是数据库逻辑而不是利用程序.存储历程是可以移植的!当你用SQL编写存储历程时,你就知道它可以运行在Mysql支持的任何平台上,不需求你额外增添运行环境包,也不需求为程序在操作系统中履行设置答应,大概为你的差别型号的电脑存储历程将被保存!假如你编写好了一个程序,比方显示银行事物处理中的支票撤消,那想要理解支票的人便可以找到你的程序.
它会以源代码的情势保存在数据库中.这将使数据和处理数据的进程有意义的关联这大概跟你在课上听到的筹划论中说的一样.存储历程可以迁移!
Mysql完好支持SQL 2003尺度.某些数据库(如DB2、Mimer)一样支持.但也有部份不支持的,如Oracle、sql server不支持.我们将会赐与充足帮忙和工具,使为其他DBMS编写的代码能更简单转移到Mysql上.
Setting up with MySQL 5.0 设置并开始MySQL 5.0服务
通过
mysql_fix_privilege_tables
~/mysql-5.0/scripts/mysql_install_db
来开始MySQL服务
作为我们操练的预备工作的一部份,我假定MySQL 5.0已经安装.假如没有数据库管理员为你安装好数据库以及其他软件,你就需求自己去安装了.不过你很简单忘掉一件事,那就是你需求有一个名为mysql.proc的表.
在安装了最新版本后,你必须运行
mysql_fix_privilege_tables
大概
mysql_install_db
(只需求运行此中一个就够了)——不然存储历程将不能工作.我同时启用在root身份后运行一个非正式的SQL脚本,以下:
mysql> source/home/pgulutzan/mysql-5.0/scripts/mysql_prepare_privilege_tables_for_5.sql
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语句用在存储历程中,这里只是为了演示.所以利用这样的语句,能在调用时更好的看出程序能否正常工作.未完待续...
以上是“MySQL 5.0新特点教程 存储历程[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:本文地址: | 与您的QQ/BBS好友分享! |