My SQL 5.0 触发器
时间:2007-12-23 来源:不详 作者:迈克DB
每次我想要演示实际代码时,我会对mysql客户端的屏幕就出现的代码进行调整,将字体改成Courier,使他们看起来与普通文本不一样(让大家区别程序代码和正文)。在这里举个例子:
mysql>DROPFUNCTIONf;
QueryOK,0rowsaffected(0.00sec)
假如实例比较大,则需要在某些行和段落间加注释,同时我会用将"<--"符号放在页面的右边以表示强调。例如:
mysql>CREATEPROCEDUREp()
->BEGIN
->/*Thisproceduredoesnothing*/<--
->END;//
QueryOK,0rowsaffected(0.00sec)
有时候我会将例子中的"mysql>"和"->"这些系统显示去掉,你可以直接将代码复制到mysql客户端程序中(假如你现在所读的不是电子版的,可以在mysql.com网站下载相关脚本)
所以的例子都已经在Suse9.2Linux、Mysql5.0.3公共版上测试通过。在您阅读本书的时候,Mysql已经有更高的版本,同时能支持更多OS了,包括Windows,Sparc,HP-UX。因此这里的
例子将能正常的运行在您的电脑上。但假如运行仍然出现故障,可以咨询你熟悉的资深Mysql用户,这样就能得到比较好的支持和帮助。转载请注明翻译者陈朋奕及转自:www.phpv.net
本文来自织梦
WhyTriggers为什么要用触发器
我们在MySQL5.0中包含对触发器的支持是由于以下原因:
MySQL早期版本的用户长期有需要触发器的要求。
我们曾经许诺支持所有ANSI标准的特性。
您可以使用它来检查或预防坏的数据进入数据库。
您可以改变或者取消INSERT,UPDATE以及DELETE语句。
您可以在一个会话中监视数据改变的动作。
在这里我假定大家都读过"MySQL新特性"丛书的第一集--"MySQL存储过程",那么大家都应该知道MySQL至此存储过程和函数,那是很重要的知识,因为在触发器中你可以使用在函数中使用的语句。非凡举个例子:
复合语句(BEGIN/END)是合法的.转载请注明翻译者陈朋奕及转自:www.phpv.net
流控制(Flow-of-control)语句(IF,CASE,WHILE,LOOP,WHILE,REPEAT,LEAVE,ITERATE)也是合法的.
变量声明(DECLARE)以及指派(SET)是合法的.
答应条件声明.
异常处理声明也是答应的.
但是在这里要记住函数有受限条件:不能在函数中访问表.因此在函数中使用以下语句是非法的。
ALTER’CACHEINDEX’CALLCOMMITCREATEDELETE
DROP’FLUSHPRIVILEGES’GRANTINSERTKILL
dedecms.com
LOCKOPTIMIZEREPAIRREPLACEREVOKE
ROLLBACKSAVEPOINT’SELECTFROMtable’
’SETsystemvariable’’SETTRANSACTION’
SHOW’STARTTRANSACTION’TRUNCATEUPDATE
在触发器中也有完全一样的限制.
触发器相对而言比较新,因此会有(bugs)缺陷.所以我在这里给大家警告,就像我在存储过程书中所说那样.不要在含有重要数据的数据库中使用这个触发器,假如需要的话在一些以测试为目的的数据库上使用,同时在你对表创建触发器时确认这些数据库是默认的。
Syntax语法
1.Syntax:Name语法:命名规则转载请注明翻译者陈朋奕及转自:www.phpv.net
CREATETRIGGER<触发器名称><--
{BEFORE|AFTER}
{INSERT|UPDATE|DELETE}
ON<表名称>
FOREACHROW
<触发器SQL语句>
上一篇:My SQL 如何从表中取出随机数据 下一篇:My SQL常见错误问答!
文章评论
共有位Admini5网友发表了评论 查看完整内容