MySQL5.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))//
  下一步就是建立一个在做插入动作出错时存储错误的表。

时间: 2025-01-25 10:24:37

MySQL5.0存储过程教程_Mysql的相关文章

RHEL6.5编译安装MySQL5.6.26教程_Mysql

一.准备编译环境,安装所需依赖包 yum groupinstall 'Development' -y yum install openssl openssl-devel zlib zlib-devel -y yum install readline-devel pcre-devel ncurses-devel bison-devel cmake -y 二.编译安装 1.使用cmake编译,cmake编译方式不同于make,对比如下: make:  ./configure  ./configure

Centos6.5在线安装mysql 8.0详细教程_Mysql

Centos6.5在线安装mysql 8.0的顺序如下,希望大家可以顺利进行安装. Mysql卸载从下往上顺序 [root@localhost /]# rpm -e --nodeps qt-MySQL-4.6.2-26.el6_4.x86_64 [root@localhost /]# rpm -e --nodeps mysql-server-5.1.71-1.el6.x86_64 [root@localhost /]# rpm -e --nodeps mysql-libs-5.1.71-1.el

Centos6.4编译安装mysql 8.0.0 详细教程_Mysql

本文实例为大家分享了Centos6.4编译mysql  8.0.0 安装配置方法,供大家参考,具体内容如下 操作系统说明:CentOS 6.4数据库版本:MySQL 8.0.0 一.环境准备 yum install ncurses-devel -y yum install libaio -y yum install glibc-devel.i686 glibc-devel -y yum install gcc gcc-c++ -y 另外,MySQL8.0需要用gcc的版本为 4.8以上,而cen

图文详解mysql5.7安装教程_Mysql

本文实例为大家分享了mysql5.7安装图文教程供大家参考,具体内容如下 1.在官网下载解压缩版 2.解压后配置默认文件 新建个my.ini(可以复制一份my-default.ini,并改名为my.ini).my.ini会替换掉下面的my-default.ini文件. 按需修改配置文件. # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.7/en/server-configu

MySQL5.0新特性教程 存储过程:第三讲

The New SQL Statements 新SQL语句 Variables 变量 在复合语句中声明变量的指令是DECLARE. (1) Example with two DECLARE statements 两个DECLARE语句的例子 WHILE ... END WHILE CREATE PROCEDURE p8 () BEGIN DECLARE a INT; DECLARE b INT; SET a = 5; SET b = 5; INSERT INTO t VALUES (a); SE

ASP.NET 2.0数据教程之七十五: 用Managed Code创建存储过程和用户自定义函数

返回"ASP.NET 2.0数据教程目录" ASP.NET 2.0数据教程之七十五: 用Managed Code创建存储过程和用户自定义函数(下) 第八步:从表现层调用Managed Stored Procedures 当对数据访问层和 业务逻辑层进行扩充以支持调用GetDiscontinuedProducts 和 GetProductsWithPriceLessThan这2种managed stored procedures后,我们可以 在一个ASP.NET页面里展示这些存储过程的结

ASP.NET 2.0数据教程之七十四:调试存储过程

返回"ASP.NET 2.0数据教程目录" 导言: Visual Studio有很多的调试功能.我们只需要稍稍点点鼠标, 敲敲键盘就可以使用断点(breakpoints)来打断某个程序的执行,并查看其状态. 除了调试代码以外,Visual Studio也支持对SQL Server里面的存储过程进行调试 .就像可以在ASP.NET页面的后台代码类或Business Logic Layer class类里设置 断点一样,我们也可以在存储过程里设置断点. 本文我们将考察如何在 Visual

ASP.NET 2.0数据教程之六十八:在TableAdapters里使用现有的存储过程

返回"ASP.NET 2.0数据教程目录" 导言: 在前面的文章里我们考察了如何让TableAdapters向导自动的创 建存储过程.而在本文,我们将考察如何让TableAdapter使用现有的存储过程.由 于Northwind数据库现有的存储过程很少,我们也需要考察如何在Visual Studio 环境里手动向数据库添加新的存储过程. 注意: 在第63章 <Wrapping Database Modifications within a Transaction>里我们向

ASP.NET 2.0数据教程之六十七:在TableAdapters里创建新的存储过程

返回"ASP.NET 2.0数据教程目录" 导言: 本教程的Data Access Layer (DAL)使用的是类型化的数据集 (Typed DataSets).就像我们在第一章<Creating aData Access Layer>里探讨 的一样,该类型化的数据集由强类型的DataTable和TableAdapter构成. DataTable描绘的是系统里的逻辑实体而TableAdapter引用相关数据库执行数据访 问,包括对DataTable填充数据.执行返回标量数