MYSQL教程MySQL5.0存储过程教程
发布时间:2020-12-12 02:53:48 所属栏目:MySql教程 来源:网络整理
导读:《MYSQL教程MySQL5.0存储过程教程》要点: 本文介绍了MYSQL教程MySQL5.0存储过程教程,希望对您有用。如果有疑问,可以联系我们。 希望这本书能像内行专家那样与您进行对话,用简单的问题、例子让你学到需要的知识.为了达到这样的目的,我会从每一个细节开始慢
《MYSQL教程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网站下载相关脚本)所以的例子都已经在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))// 下一步就是建立一个在做插入动作出错时存储错误的表. 编程之家PHP培训学院每天发布《MYSQL教程MySQL5.0存储过程教程》等实战技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培养人才。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |