此文章主要向大家介绍的是MySQL5触发器,每次我演示实际代码的时候会对MySQL(和PHP搭配之最佳组合)客户端的屏幕就出现的代码进行相关的调整,主要是将字体改成Courier,使他们看起来与普通文本不一样(让大家区别程序代码和正文)。
MySQL5触发器教程在这里举个例子:
MySQL(和PHP搭配之最佳组合)> DROP FUNCTION f;Query OK, 0 rows affected (0.00 sec)如果实例比较大,则需要在某些行和段落间加注释,同时我会用将”<–“符号放在页面的右边以表示强调。例如:
MySQL(和PHP搭配之最佳组合)> CREATE PROCEDURE p ()-> BEGIN-> /* This procedure does nothing */ <—> END;//Query OK, 0 rows affected (0.00 sec)有时候我会将例子中的”MySQL(和PHP搭配之最佳组合)>”和”->”这些系统显示去掉,你可以直接将代码复制到MySQL(和PHP搭配之最佳组合)客户端程序中(如果你现在所读的不是电子版的,可以在MySQL(和PHP搭配之最佳组合).com网站下载相关脚本) 所以的例子都已经在Suse 9.2 Linux、MySQL(和PHP搭配之最佳组合) 5.0.3公共版上测试通过。
在您阅读本书的时候,MySQL(和PHP搭配之最佳组合)已经有更高的版本,同时能支持更多OS了,包括Windows,Sparc,HP-UX。因此这里的例子将能正常的运行在您的电脑上。但如果运行仍然出现故障,可以咨询你认识的资深MySQL(和PHP搭配之最佳组合)用户,这样就能得到比较好的支持和帮助。
为什么要用触发器
我们在MySQL(和PHP搭配之最佳组合) 5.0中包含对触发器的支持是由于以下原因:
MySQL(和PHP搭配之最佳组合)早期版本的用户长期有需要触发器的要求。我们曾经许诺支持所有ANSI标准的特性。您可以使用它来检查或预防坏的数据进入数据库。您可以改变或者取消INSERT, UPDATE以及DELETE语句。您可以在一个会话中监视数据改变的动作。
在这里我假定大家都读过”MySQL(和PHP搭配之最佳组合)新特性”丛书的第一集–“MySQL(和PHP搭配之最佳组合)存储过程”,那么大家都应该知道MySQL(和PHP搭配之最佳组合)至此存储过程和函数,那是很重要的知识,因为在触发器中你可以使用在函数中使用的语句。特别举个例子:
复合语句(BEGIN / END)是合法的.流控制(Flow-of-control)语句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的.变量声明(DECLARE)以及指派(SET)是合法的.允许条件声明.异常处理声明也是允许的.但是在这里要记住函数有受限条件:不能在函数中访问表.因此在函数中使用以下语句是非法的。
在MySQL5触发器中也有完全一样的限制.触发器相对而言比较新,因此会有(bugs)缺陷.所以我在这里给大家警告,就像我在存储过程书中所说那样.不要在含有重要数据的数据库中使用这个触发器,如果需要的话在一些以测试为目的的数据库上使用,同时在你对表创建触发器时确认这些数据库是默认的。
语法
1. 语法:命名规则CREATE TRIGGER <触发器名称> <–{ BEFORE | AFTER }{ INSERT | UPDATE | DELETE }ON <表名称>FOR EACH ROW<触发器SQL语句>触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL(和PHP搭配之最佳组合)中其他对象的命名方式基本相象.
这里我有个习惯:就是用表的名字+’_’+触发器类型的缩写.因此如果是表t26,触发器是在事件UPDATE(参考下面的点(2)和(3))之前(BEFORE)的,那么它的名字就是t26_bu。
2. 语法:
触发时间CREATE TRIGGER <触发器名称>{ BEFORE | AFTER } <–{ INSERT | UPDATE | DELETE }ON <表名称>FOR EACH ROW<触发的SQL语句>触发器有执行的时间设置:可以设置为事件发生前或后。
3. 语法:事件CREATE TRIGGER <触发器名称>{ BEFORE | AFTER }{ INSERT | UPDATE | DELETE } <–ON <表名称>FOR EACH ROW<触发的SQL语句>同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。
4. 语法:表CREATE TRIGGER <触发器名称>{ BEFORE | AFTER }{ INSERT | UPDATE | DELETE }ON <表名称> <–FOR EACH ROW<触发的SQL语句>触发器是属于某一个表的:当在这个表上执行插入、更新或删除操作的时候就导致触发器的激活.我们不能给同一张表的同一个事件安排两个触发器。
5. 语法:( 步长)触发间隔CREATE TRIGGER <触发器名称>{ BEFORE | AFTER }{ INSERT | UPDATE | DELETE }ON <表名称>FOR EACH ROW <–<触发的SQL语句>触发器的执行间隔:FOR EACH ROW子句通知触发器每隔一行执行一次动作,而不是对整个表执行一次。
6. 语法:语句CREATE TRIGGER <触发器名称>{ BEFORE | AFTER }{ INSERT | UPDATE | DELETE }ON <表名称>FOR EACH ROW<触发的SQL语句> <–触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句,包括复合语句,但是这里的语句受的限制和函数的一样。Privileges权限你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER)。
如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。因此在下一个版本的MySQL(和PHP搭配之最佳组合)中,你完全有可能看到有一种叫做CREATE TRIGGER的新权限。然后通过这样的方法赋予:GRANT CREATE TRIGGER ON <表名称> TO <用户或用户列表>;也可以通过这样收回权限:REVOKE CREATE TRIGGER ON <表名称> FROM <用户或用户列表>;关于旧的和新创建的列的标识
在触发器的SQL语句中,你可以关联表中的任意列。但你不能仅使用列的名称去标识,那会使系统混淆,因为那里可能会有列的新名(这可能正是你要修改的,你的动作可能正是要修改列名),还有列的旧名存在。因此你必须用这样的语法来标识: “NEW . column_name”或者”OLD . column_name”.这样在技术上处理(NEW | OLD . column_name)新和旧的列名属于创建了过渡变量(”transition variables”)。
对于INSERT语句,只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在和NEW以及OLD同时使用。下面是一个UPDATE中同时使用NEW和OLD的例子。
现在如果t21表中的s1列的值是55,那么执行了”UPDATE t21 SET s1 = s1 + 1″之后@old的值会变成55,而@new的值将会变成56。Example of CREATE and INSERT CREATE和INSERT的例子创建有MySQL5触发器的表这里所有的例程中我都假定大家的分隔符已经设置成//(DELIMITER //)。
CREATE TABLE t22 (s1 INTEGER)//CREATE TRIGGER t22_biBEFORE INSERT ON t22FOR EACH ROWBEGINSET @x = ‘Trigger was activated!’;SET NEW.s1 = 55;END;//在最开始我创建了一个名字为t22的表,然后在表t22上创建了一个触发器t22_bi,当我们要向表中的行插入时,触发器就会被激活,执行将s1列的值改为55的动作。
使用触发器执行插入动作
MySQL(和PHP搭配之最佳组合)> INSERT INTO t22 VALUES (1)//
让我们看如果向表t2中插入一行数据触发器对应的表会怎么样? 这里的插入的动作是很常见的,我们不需要触发器的权限来执行它。甚至不需要知道是否有触发器关联。
大家可以看到INSERT动作之后的结果,和我们预期的一样,x标记被改动了,同时这里插入的数据不是我们开始输入的插入数据,而是触发器自己的数据。
“check”完整性约束例子什么是”check”约束在标准的SQL语言中,我们可以在(CREATE TABLE)创建表的过程中使用”CHECK (condition)”,例如:CREATE TABLE t25(s1 INT, s2 CHAR(5), Prima(最完善的虚拟主机管理系统)RY KEY (s1),CHECK (LEFT(s2,1)=’A’))ENGINE=INNODB;这里CHECK的意思是”当s2列的最左边的字符不是’A’时,insert和update语句都会非法”,MySQL(和PHP搭配之最佳组合)的视图不支持CHECK,我个人是很希望它能支持的。
但如果你很需要在表中使用这样的功能,我建议大家使用触发器来实现。
我只需要使用BEFORE INSERT和BEFORE UPDATE语句就行了,删除了触发器不会对表有影响,同时AFTER的触发器也不能修改NEW的过程变量(transition variables)。为了激活触发器,我执行了向表中的行插入s1=0的数据,之后只要执行符合LEFT(s2,1) <> ‘A’条件的动作都会失败:
INSERT INTO t25 VALUES (0,’a’) /* priming the pump */ //INSERT INTO t25 VALUES (5,’b’) /* gets error ‘23000’ */ //Don’t Believe The Old MySQL(和PHP搭配之最佳组合) Manual该抛弃旧的MySQL(和PHP搭配之最佳组合)的手册了
我在这里警告大家不要相信过去的MySQL(和PHP搭配之最佳组合)手册中
【编辑推荐】
CMS动态网站建设过程(800以上的)
CMS是Content Management System的缩写,意为“内容管理系统”。
CMS具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本。 CMS的功能并不只限于文本处理,它也可以处理图片、Flash动画、声像流、图像甚至电子邮件档案。 CMS其实是一个很广泛的称呼,从一般的博客程序,新闻发布程序,到综合性的网站管理程序都可以被称为内容管理系统。
CMS建站的优点
1、简单易学 作为一个网站新手来说,想要建站那是相当困难,代码、数据库、设计这些统统都不懂,这些成为了站长的烦恼,而cms强大的后台管理就可以解决这些问题,不需要你懂太多的东西,只要用户名和密码登陆,你就可以很快的操作起来。
2、安全性 大家都知道,程序一旦被入侵,整个网站就要完蛋了,而cms就不会有这样的问题,它提高了网站的安全性,动态页面暴露较少,受到的安全威胁就小得多,网站也就不怕被黑客入侵了。
3、稳定性 稳定性对于一个网站来说,还是相当重要的,总是出错的网站是不会有人喜欢的。
4、网站运行快 cms主张生成静态页面,包括主页、分类页,静态的输出大大的减少了网站运行的速度,静态的页面不需要服务器做什么处理,所以访问起来也是很快的。
5、采集功能 cms可以提供采集的功能,只要做好采集规则就可以,再也不用为了手动添加网站内容而闹心了。 在采集的同时还可以进行其他操作,实现了“一心二用”的效果。
6、搜索引擎友好 采用DIV+CSS布局网页,简单的代码结构有助于网站的优化。
7、风格模板拥有独特的风格模板,只要上传到空间就可以使用。 再也不用为繁琐的代码而头疼了。

下面CMS特工()以最流行的织梦CMS(dedecms)为例讲解CMS的建站安装过程:
我们完成了环境的准备之后,下面就可以通过在浏览器中输入安装向导的网址开始进行DedeCMS的安装,在安装完成之后我们就可以看到我们的站点。
我们下载下来通常是一个压缩包,将其解压,然后将upload文件夹中的文件上传到网站的根目录中。
提示:安装包解压后,一般含有使用协议、安装说明及版本说明几个文件,新人在第一次使用的时候希望阅读下相关的说明。
1. 在浏览器中打开 http:// 你的网址/install/ ,开始进行安装。
2. 选中“我已经阅读并同意此协议”点击继续,这里系统跳转到环境检测页面。
这里我们对系统环境做一个简单的说明:
DedeCMS是基于PHP和MySQL技术开发,可以同时使用在Windows、Linux、Unix平台,其具体环境如下:
◆Windows 平台 IIS/apache + PHP4/PHP5 + MySQL3/4/5
如果在windows环境中使用,建议用DedeCms提供的DedeAMPZ套件以达到最佳使用性能。
◆Linux/Unix 平台 Apache + PHP4/PHP5 + MySQL3/4/5 (PHP必须在非安全模式下运行) 建议使用平台 Linux + Apache2.2 + PHP5.2 + MySQL5.0
◆PHP必须环境或启用的系统函数 [√]allow_url_fopen [√]GD扩展库
[√]MySQL扩展库 [√]系统函数(phpinfo、dir)
3. 如果环境检测全部正确([√]),我们点击“继续”进入“参数配置”
4. 首先我们配置“数据库设定”部分的参数,这里我们涉及到几个概念“数据库主机”、“数据库名称”、“数据库用户”、“数据库密码”、“数据表前缀”、“数据库编码”。
如果您使用的是虚拟主机或者合租服务器,一般空间商都会提供给你相关的数据,如果你是自己配置服务器或者本地测试,一般在环境架设时候会有相关的信息提示。
以DedeAMPZ为例,因为Apache和MySQL共同安装在一台计算机上,所以数据库主机地址为“localhost”,数据库名称我们这是设置为默认“dedecmsv53”,数据库用户名为“root”、密码为MySQL数据库默认密码“”,表前缀为“dede_”。
说明:数据表前缀是为了方便一个数据库中存放多个程序的数据库,例如你一个数据库需要安装两个DedeCMS系统,第一个系统数据表前缀可以设置为“dedea_”,第二个数据表可以设置为“dedeb_”,因为表前缀不同,数据表在数据库中存在的表名也不相同,例如第一个系统的管理员账号存放的数据表则为“dedea_admin”,第二个数据表名为“dedeb_admin”,这样他们两个系统的数据库就可以共存在一个Mysql数据库中。
5. 网站设置中需要注意的是填写你的“网站网址”和“CMS安装目录”,其中“CMS安装目录”如果你安装在网站根目录不需要去理会,如果你安装在根目录的某个文件夹下需要进行相关的设置(程序会自动检测)。
6. 点击“继续”,完成DedeCMS的安装,到这里为止,我们的安装已经完成了,下面就是我们开始使用DedeCMS了。
7. 点击[登陆网站后台],网址自动转向到(yoursite代表你的网站),输入我们安装时候填写的管理员用户名和密码,以超级管理员身份登陆系统。
提示:系统默认管理路径是dede,登陆管理后台可以通过地址进行访问,但是为了确保系统的安全,建议新人在安装完成之后修改后台的管理路径,例如:myadmin,这样你可以通过登陆,别人就不容易猜到你的后台地址。(CMS特工告诉你:这条很重要!)
oracle sys 创建表空间的时候权限不足!!!!
估计是登入Oracle的操作系统用户对f:/dataspace/文件夹没有写权限。
id 和 :hidden之间有空格吗
1、html采用是为了显示文本数据;2、应用hidden 是为了显示数据,但又不想让浏览用户看到,该数据只是提供给设计页面的程序员控制页面使用的;3、由于在页面中可能采用多个由程序员控制使用的,因此需要给一个标识,以备程序员读取其中的数据,id就是的标志,像我们每一个人都有一个唯一识别的标识(身份证号)一样,id在理论上也是唯一的;4、通过id操作中的数据,是通过脚本语言完成的,通常情况下,html有两种脚本可以使用,javascript ,vbscript,现在大家常用的是javascript。 5、学好网页,是必须要学好脚本的。 6、学做网页可采用以下步骤循序渐进html,css,javascript,一种编程语言(jsp,asp,php等),一种数据库(mysql,access,sql Server等)--》成才了!!
发表评论