当前位置:七道奇文章资讯数据防范MySQL防范
日期:2011-05-02 15:44:00  来源:本站整理

MySQL5新特点简介[MySQL防范]

赞助商链接



  本文“MySQL5新特点简介[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
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

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语句用在存储历程中,这里只是为了演示.所以利用这样的语句,能在调用时更好的看出程序能否正常工作.   以上是“MySQL5新特点简介[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • mysql数据库插入速度和读取速度的调整记录
  • MySQL Order By索引优化办法
  • MySQL Order By用法分享
  • mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
  • MySQL Order By Rand()效率解析
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .