服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Mssql|Oracle|Redis|

服务器之家 - 数据库 - Mysql - MySQL5.0存储过程教程

MySQL5.0存储过程教程

2019-10-22 14:04mysql教程网 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用户,以得到长久的支持和帮助。 
Why MySQL Statements are Legal in a Procedure Body 
  什么MySQL语句在存储过程体中是合法的? 
  什么样的SQL语句在Mysql存储过程中才是合法的呢?你可以创建一个包含INSERT, 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 问题样例:故障记录 
  当INSERT失败时,我希望能将其记录在日志文件中我们用来展示出错处理的问题样例是很 
普通的。我希望得到错误的记录。当INSERT失败时,我想在另一个文件中记下这些错误的 
信息,例如出错时间,出错原因等。我对插入特别感兴趣的原因是它将违反外键关联的约束 
2. Sample Problem: Log Of Failures (2) 
mysql> CREATE TABLE t2 
s1 INT, PRIMARY KEY (s1)) 
engine=innodb;// 
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))// 
  下一步就是建立一个在做插入动作出错时存储错误的表。

延伸 · 阅读

精彩推荐
  • Mysqlmysql事务select for update及数据的一致性处理讲解

    mysql事务select for update及数据的一致性处理讲解

    今天小编就为大家分享一篇关于mysql事务select for update及数据的一致性处理讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋...

    CODETC3592019-06-01
  • MysqlMysql多主一从数据备份的方法教程

    Mysql多主一从数据备份的方法教程

    这篇文章主要给大家介绍了关于Mysql多主一从数据备份的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,...

    张志有3832019-06-13
  • Mysqlmysql学习之引擎、Explain和权限的深入讲解

    mysql学习之引擎、Explain和权限的深入讲解

    这篇文章主要给大家介绍了关于mysql学习之引擎、Explain和权限的相关资料,文中通过示例代码将引擎、Explain和权限介绍的非常详细,对大家学习或者使用...

    人生不如戏4382019-07-09
  • MysqlMySQL临时表的简单用法介绍

    MySQL临时表的简单用法介绍

    这篇文章给大家简单介绍了MySQL临时表的简单用法,对此有需要的朋友可以跟着学习操作下。...

    奋斗吧_攻城狮1502019-07-08
  • MysqlMySQL 索引分析和优化

    MySQL 索引分析和优化

    索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。...

    mysql技术网1722019-10-15
  • MysqlMysql中replace与replace into的用法讲解

    Mysql中replace与replace into的用法讲解

    今天小编就为大家分享一篇关于Mysql中replace与replace into的用法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随...

    CODETC4642019-06-24
  • Mysqlphp中如何将图片储存在数据库里

    php中如何将图片储存在数据库里

    如果你想把二进制的数据,比如说图片文件和HTML文件,直接保存在你的MySQL数据库,那么这篇文章就是为你而写的!我将告诉你怎样通过HTML表单来储存这些文...

    mysql教程网2472019-10-17
  • MysqlCMD命令操作MySql数据库的方法详解

    CMD命令操作MySql数据库的方法详解

    今天小编就为大家分享一篇关于CMD命令操作MySql数据库的方法详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随...

    炫酷飞扬2932019-06-03