MySQL5.0存储过程教程


  希望这本书能像内行专家那样和您进行对话用简单问题、例子让你学到需要知识为了达到这样我会从每个细节开始慢慢为大家建立概念最后会给大家展示较大实用例在学习的前也许大家会认为这个用例很难但是只要跟着课程去学相信很快就能掌握
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网站WebSite下载相关脚本)所以例子都已经在Suse 9.2 Linux、Mysql 5.0.3公共版上测试通过
  在您阅读本书时候Mysql已经有更高版本同时能支持更多OS了包括WindowsSparcHP-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
constra fails(这里显示是系统出错信息)
  我开始要创建个主键表以及个外键表我们使用是InnoDB因此外键关联检查是打
然后当我向外键表中插入非主键表中值时动作将会失败当然这种条件下可以很
快找到号1216
3. Sample Problem: Log Of Failures
CREATE TABLE error_log (error_message
CHAR(80))//
  下步就是建立个在做插入动作出错时存储
Tags: 

延伸阅读

最新评论

发表评论