MySQL5新特性简介

2008-02-23 07:43:05来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

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用户,以得到长久的支持和帮助。

A Definition and an Example 定义及实例

定义及实例存储过程是一种存储在书库中的程式(就像正规语言里的子程式相同),准确的来说,MySQL支持的“routines(例程)”有两种:一是我们说的存储过程,二是在其他SQL语句中能够返回值的函数(使用起来和Mysql预装载的函数相同,如pi())。我在本书里面会更经常使用存储过程,因为这是我们过去的习惯,相信大家也会接受。

一个存储过程包括名字,参数列表,连同能够包括很多SQL语句的SQL语句集。

在这里对局部变量,异常处理,循环控制和IF条件句有新的语法定义。

下面是个包括存储过程的实例声明:(译注:为了方便阅读,此后的程式不添任何中文注释)

CREATE PROCEDURE procedure1 /* name存储过程名*/

(IN parameter1 INTEGER) /* parameters参数*/

BEGIN /* start of block语句块头*/

DECLARE variable1 CHAR(10); /* variables变量声明*/

IF parameter1 = 17 THEN /* start of IF IF条件开始*/

SET variable1 = 'birds'; /* assignment赋值*/

ELSE

SET variable1 = 'beasts'; /* assignment赋值*/

END IF; /* end of IF IF结束*/

INSERT INTO table1 VALUES (variable1);/* statement SQL语句*/

END /* end of block语句块结束*/

下面我将会介绍您能够利用存储过程做的工作的任何细节。同时我们将介绍新的数据库对象—触发器,因为触发器和存储过程的关联是必然的。

Why Stored Procedures 为什么要用存储过程

由于存储过程对于MySQL来说是新的功能,很自然的在使用时您需要更加注意。

毕竟,在此之前没有任何人使用过,也没有很多大量的有经验的用户来带您走他们走过的路。然而您应该开始考虑把现有程式(可能在服务器应用程式中,用户自定义函数(UDF)中,或是脚本中)转移到存储过程中来。这样做无需原因,您不得不去做。

因为存储过程是已被认证的技术!虽然在Mysql中他是新的,但是相同功能的函数在其他DBMS中早已存在,而他们的语法往是相同的。因此您能够从其他人那里获得这些概念,也有很多您能够咨询或雇用的经验用户,更有许多第三方的文档可供您阅读。

存储过程会使系统运行更快!虽然我们暂时不能在Mysql上证实这个优势,用户得到的体验也不相同。我们能够说的就是Mysql服务器在缓存机制上做了改进,就像Preparedstatements(预处理语句)所做的那样。由于没有编译器,因此SQL存储过程不会像外部语言(如C)编写的程式运行起来那么快。但是提升速度的主要方法却在于能否降低网络信息流量。假如您需要处理的是需要检查、循环、多语句但没有用户交互的重复性任务,您就能够使用保存在服务器上的存储过程来完成。这样在执行任务的每一步时服务器和客户端之间就没那么多的信息来往了。

所以存储过程是可复用的组件!想象一下假如您改变了主机的语言,这对存储过程不会产生影响,因为他是数据库逻辑而不是应用程式。存储过程是能够移植的!当您用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

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: MySQL常用查询的例子

下一篇: MySQL5新语句declare的用法