热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MySQL5.0存储过程详细讲解_MySQL

Introduction简介YI,Pj`T5pC0%MySQL5.0新特性教程是为需要了解5.0版本新特性的MySQL老用户而写的。简单的来说是介绍了存储过程、触发器、视图、信息架构视图,在此感谢译者陈朋奕的努力.,J1|.b5v+931ZV*q希望这本书能像内行专家那样与您进行对话,用简单的
Introduction 简介 YI,Pj`T5
pC/ 0'%
MySQL 5.0 新特性教程是为需要了解5.0版本新特性的MySQL老用户而写的。简单的来说是介绍了“存储过程、触发器、视图、信息架构视图”,在此感谢译者陈朋奕的努力. ,J1|.b 5
v+931ZV*q
  希望这本书能像内行专家那样与您进行对话,用简单的问题、例子让你学到需要的知识。为了达到这样的目的,我会从每一个细节开始慢慢的为大家建立概念,最后会给大家展示较大的实用例,在学习之前也许大家会认为这个用例很难,但是只要跟着课程去学,相信很快就能掌握。 E{sA7
v6grz{ {
Conventions and Styles 约定和编程风格 "t-_2T%h
P<H$M.
  每次我想要演示实际代码时,我会对mysql客户端的屏幕就出现的代码进行调整,将字体改成Courier,使他们看起来与普通文本不一样。 M6B~by
^,MA5pj5v
  在这里举个例子:mysql> DROP FUNCTION f;Query OK, 0 rows affected (0.00 sec) .~nSXEu
Kl,#%
  如果实例比较大,则需要在某些行和段落间加注释,同时我会用将“<--”符号放在页面的右边以表示强调。 nkqQqTv7
W.-!>mU
  例如: 2U"eF[1%G
; {Re614hd
mAt{h?G92
mysql> CREATE PROCEDURE p () e8 [j&Pin
-> BEGIN x4U &
-> /* This procedure does nothing */ <-- W,bCf3b{3
-> END;//Query OK, 0 rows affected (0.00 sec) R g|\}'
\ K+f*~>
,d:H9VB
  有时候我会将例子中的"mysql>"和"->"这些系统显示去掉,你可以直接将代码复制到mysql客户端程序中(如果你现在所读的不是电子版的,可以在mysql.com网站下载相关脚本)所以的例子都已经在Suse 9.2 Linux、Mysql 5.0.3公共版上测试通过。 melM%o
';4(|M4%
  在您阅读本书的时候,Mysql已经有更高的版本,同时能支持更多OS了,包括Windows,Sparc,HP-UX。因此这里的例子将能正常的运行在您的电脑上。但如果运行仍然出现故障,可以咨询你认识的资深Mysql用户,以得到长久的支持和帮助。 B<Q])^~I`
Why MySQL Statements are Legal in a Procedure Body z B'CzZ]
  什么MySQL语句在存储过程体中是合法的? [.G 5y>,m%
/]jP
  什么样的SQL语句在Mysql存储过程中才是合法的呢?你可以创建一个包含INSERT, UPDATE,DELETE, SELECT, DROP, CREATE, REPLACE等的语句。你唯一需要记住的是如果代码中包含MySQL扩充功能,那么代码将不能移植。在标准SQL语句中:任何数据库定义语言都是合法的,如:  C%r
Y!V4) )I"
BEz;Q8;
?-2}9D!:
_(8)ETMb
CREATE PROCEDURE p () DELETE FROM t; // JR%GJ1'2q2
lGs?i 2 4K
  SET、COMMIT以及ROLLBACK也是合法的,如: I7iDsM
t(!*x7F>PK
FxD%+&E7H
CREATE PROCEDURE p () SET @x = 5; // 2B;hZ'A
_7ruKxZY
F)c |OMH
  MySQL的附加功能:任何数据操作语言的语句都将合法。 E mh D6)
GJR.P^7t%!
=4KN 0v4
CREATE PROCEDURE p () DROP TABLE t; // )T@9ue4
]Az"WF^;
Qok (
  MySQL扩充功能:直接的SELECT也是合法的: uQ.uOkq`
pD& T3s1
j&1o&2LD
CREATE PROCEDURE p () SELECT 'a'; // TY_UUmRDs
EZd&R1xp
5ls[l}PxY
  顺便提一下,我将存储过程中包括DDL语句的功能称为MySQL附加功能的原因是在SQL标准中把这个定义为非核心的,即可选组件。 O|K@/H!`
"~!6Tw:9KS
rz]sMTDN]
The New SQL Statements 新SQL语句 s Dj>ZG"'
J4{z"\
Variables 变量 i;>6? O
/BHC)VxUu
  在复合语句中声明变量的指令是DECLARE。 y3D[^
Q6T@cyVG
  (1) Example with two DECLARE statements 'djnaVKz:!
^>M[c_ Z
  两个DECLARE语句的例子 O )V4`tN#
f|tJ\Y,Ss
qcN-pc4
pcA_7@L
Fzlmm7% 
;_iIl
'7WWbz0rR
CREATE PROCEDURE p8 () :q:?9 T[
 !oG
BEGIN 2< M\`+a
@b}oh#\r
DECLARE a INT; F%nx() 
sergz+BW%
DECLARE b INT; 9UEM8Z;bE9
n!P7?]t
SET a = 5; %$V]UQ_Q
c"-#[>JA
SET b = 5; TX.!\{%)
1zOWZ?
INSERT INTO t VALUES (a); 8
0bjYy,e
SELECT s1 * a FROM t WHERE s1 >= b; _" !)p vD
ac5app:}s
END; // /* I won't CALL this */ /=ws*#R(
=F6|gM.
#c5k@4?+k
  在过程中定义的变量并不是真正的定义,你只是在BEGIN/END块内定义了而已(译注:也就是形参)。 3/p'1;
m 42*
Error Handling 异常处理 hO~- K.h]
g&%saj(,
  好了,我们现在要讲的是异常处理 cB2i%k'z[t
^Lj)'[\)v(
1. Sample Problem: Log Of Failures 问题样例:故障记录 p
.e%zd]$
  当INSERT失败时,我希望能将其记录在日志文件中我们用来展示出错处理的问题样例是很 UVdF}H5L
普通的。我希望得到错误的记录。当INSERT失败时,我想在另一个文件中记下这些错误的 v.$m0&
信息,例如出错时间,出错原因等。我对插入特别感兴趣的原因是它将违反外键关联的约束 M-w#i`WP$=
]KI OY
2. Sample Problem: Log Of Failures (2) !jd]|3d^*j
/+46)>\D

mysql> CREATE TABLE t2 tW]6
s1 INT, PRIMARY KEY (s1)) 7H!n8?d~
engine=innodb;// <31!KM)
mysql> CREATE TABLE t3 (s1 INT, KEY (s1), h1p6c,][y
FOREIGN KEY (s1) REFERENCES t2 (s1)) ohHl%*xU43
engine=innodb;// @rDJk6
mysql> INSERT INTO t3 VALUES (5);// 95xwsMC
... }9D'f5bX
ERROR 1216 (23000): Cannot add or update a child row: a foreign key <;@wldJ} N
constraint fails(这里显示的是系统的出错信息) SDPQ8
~cl&G
*:+*](] o
  我开始要创建一个主键表,以及一个外键表。我们使用的是InnoDB,因此外键关联检查是打 u=mQ4# U
开的。然后当我向外键表中插入非主键表中的值时,动作将会失败。当然这种条件下可以很 TR { #rc
快找到错误号1216。 VR{X!:1+
7gg"-;o`UU
3. Sample Problem: Log Of Failures ~d4m/ P
ND;973UFs
{f>Va{B
CREATE TABLE error_log (error_message zVj6_/}1M
CHAR(80))// pWd`7fBt
NT@Z5,|!

      下一步就是建立一个在做插入动作出错时存储错误的表。
推荐阅读
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 推荐一个ASP的内容管理框架(ASP Nuke)的优势和适用场景
    本文推荐了一个ASP的内容管理框架ASP Nuke,并介绍了其主要功能和特点。ASP Nuke支持文章新闻管理、投票、论坛等主要内容,并可以自定义模块。最新版本为0.8,虽然目前仍处于Alpha状态,但作者表示会继续更新完善。文章还分析了使用ASP的原因,包括ASP相对较小、易于部署和较简单等优势,适用于建立门户、网站的组织和小公司等场景。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了如何在MySQL中将零值替换为先前的非零值的方法,包括使用内联查询和更新查询。同时还提供了选择正确值的方法。 ... [详细]
  • 本文由编程笔记小编整理,介绍了PHP中的MySQL函数库及其常用函数,包括mysql_connect、mysql_error、mysql_select_db、mysql_query、mysql_affected_row、mysql_close等。希望对读者有一定的参考价值。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
author-avatar
手机用户2502939543
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有