0存储进程教程

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用户,以博取长时间的支撑和增援。
Why MySQL Statements are Legal in a Procedure Body
  什么MySQL语句在蕴藏进度体中是法定的?
  什么样的SQL语句在Mysql存储进度中才是合法的吗?你可以创立三个暗含INSE凯雷德T,
UPDATE,DELETE, SELECT, DROP, CREATE,
REPLACE等的言辞。你唯一必要牢记的是假使代码中包括MySQL伸张功用,那么代码将不能移植。在专业SQL语句中:任何数据库定义语言都以法定的,如:

CREATE PROCEDURE p () DELETE FROM t; //
  SET、COMMIT以及ROLLBACK也是官方的,如:
CREATE PROCEDURE p () SET @x = 5; //
  MySQL的附加功效:任何数据操作语言的言语都将法定。
CREATE PROCEDURE p () DROP TABLE t; //
  MySQL扩张成效:直接的SELECT也是官方的:
CREATE PROCEDURE p () SELECT ‘a’; //
  顺便提一下,作者将积存进度中包蕴DDL语句的意义称为MySQL附加效率的案由是在SQL标准中把那些概念为非主题的,即可选组件。
The New SQL Statements 新SQL语句
Variables 变量
  在复合语句中宣示变量的指令是DECLARE。
  (1) Example with two DECLARE statements
  多个DECLARE语句的例证

CREATE PROCEDURE p8 ()
BEGIN
DECLARE a INT;
DECLARE b INT;
SET a = 5;
SET b = 5;
INSERT INTO t VALUES (a);
SELECT s1 * a FROM t WHERE s1 >= b;
END; // /* I won’t CALL this */
  在进度中定义的变量并不是当真的概念,你只是在BEGIN/END块指定义了而已(译注:也等于形参)。
Error Handling 非凡处理
  好了,大家将来要讲的是尤其处理

  1. Sample Problem: Log Of Failures 难题样例:故障记录
      当INSE逍客T失利时,作者盼望能将其记录在日记文件中我们用来呈现出错处理的题材样例是很常见的。我梦想收获错误的记录。当INSE凯雷德T战败时,小编想在另二个文件中记录这一个错误的音讯,例如出错时间,出错原因等。小编对插入更加感兴趣的原故是它将违反外键关联的牢笼
  2. Sample Problem: Log Of Failures (2)
    mysql> CREATE TABLE t2
    s1 INT, PRIMARY KEY (s1))
    engine=innodb;// www.jbxue.com
    mysql> CREATE TABLE t3 (s1 INT, KEY (s1),
    FOREIGN KEY (s1) REFERENCES t2 (s1))
    engine=innodb;//
    mysql> INSERT INTO t3 VALUES (5);//

    ERROR 1216 (23000): Cannot add or update a child row: a foreign key
    电子版,constraint fails(那里显得的是系统的失误新闻)
      笔者起来要创制一个主键表,以及多个外键表。大家利用的是InnoDB,由别的键关联检查是打
    开的。然后当小编向外键表中插入非主键表中的值时,动作将会破产。当然那种原则下可以很
    快找到错误号1216。
  3. Sample Problem: Log Of Failures

CREATE TABLE error_log (error_message
CHAR(80))//
  下一步就是身无寸铁多少个在做插入动作出错时存储错误的表。

相关文章