日期:2011-01-25 22:43:00 来源:本站整理
MySQL5.0存储历程具体讲授[MySQL防范]
本文“MySQL5.0存储历程具体讲授[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
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< l\
什么样的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<t%-y7Mr
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<m?# YRx
.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
<aByJX9
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 zVj
以上是“MySQL5.0存储历程具体讲授[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
Windows 搭配 IIS7 PHP MySQL 环境
mysql Out of memory (Needed 16777224 bytes)的错误办理
mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
mysql启用skip-name-resolve情势时呈现Warning的处理办法
mysql启用skip-name-resolve情势时呈现Warning的处理办法
MySQL Order By语法介绍
<b>MySQL ORDER BY 的实现解析</b>
mysql数据库插入速度和读取速度的调整记录
MySQL Order By索引优化办法
MySQL Order By用法分享
mysql #1062 –Duplicate entry ''1'' for key ''PRIMARY''
MySQL Order By Rand()效率解析
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< l\
什么样的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<t%-y7Mr
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<m?# YRx
.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
<aByJX9
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 zVj
以上是“MySQL5.0存储历程具体讲授[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论