创建和使用触发器课件_第1页
创建和使用触发器课件_第2页
创建和使用触发器课件_第3页
创建和使用触发器课件_第4页
创建和使用触发器课件_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

创建和使用触发器创建和使用触发器【任务提出】

一天,王宁向李老师请教问题:“老师,我向student表中添加了一条学生记录,但是忘了修改class表中number列的值,导致class表中统计的学生人数与实际不相符。”

李老师告诉王宁,为了防止这种情况,MySQL中提供了触发器机制,当我们向student表中添加一条学生记录时,自动触发修改class表的number列,从而解决数据不一致问题。触发器概述触发器(Trigger)是一种特殊的存储过程,它与表紧密相连,可以是表定义的一部分。当预定义的事件(如用户修改指定表或者视图中的数据时)发生时,触发器将会自动执行。触发器基于一个表创建,但是可以针对多个表进行操作。所以触发器可以用来对表实施复杂的完整性约束,当触发器所保存的数据发生改变时,触发器被自动激活,从而防止对数据进行不正确的修改。触发器概述触发器自动执行,在表的数据做了任何修改(比如手工输入或者使用程序采集的操作)之后立即激活触发器可以通过数据库中的相关表进行层叠更改。这比直接把代码写在前台的做法更安全合理触发器可以强制限制,这些限制比用CHECK约束所定义的更复杂。与CHECK约束不同的是,触发器可以引用其他表中的列触发器的优点如下所述:创建触发器因为触发器是一种特殊的存储过程,所以触发器的创建和存储过程的创建方式有很多相似之处,其基本语法格式如下:CREATETRIGGERtrigger_nametrigger_timetrigger_eventONtb_nameFOREACHROWtrigger_statement;01利用命令创建触发器创建触发器

在触发器的SQL语句中,可以关联表中的任何列,通过使用OLD和NEW列名来标识,如OLD.col_name、NEW.col_name。OLD.col_name关联现有的行的一列在被更新或删除前的值。NEW.col_name关联一个新行的插入或更新现有的行的一列的值。

对于INSERT语句,只有NEW是合法的。对于DELETE语句,只有OLD是合法的。对于UPDATE语句,NEW和OLD可以同时使用。创建触发器

【例1】在gradem数据库的teacher表中,定义一个触发器,当一个教师的信息被删除时,把该教师的编号和姓名添加到delteacher表中。如何实现呢?USEgradem;CREATETABLEdelteacherSELECTtno,tnameFROMteacherWHERE1=0;CREATETRIGGERtrig_teacherAFTERDELETEONteacherFOREACHROWINSERTINTOdelteacher(tno,tname)values(old.tno,old.tname);创建触发器在Navicat中,连接到MySQL服务器。展开【mysql】|【gradem】|【表】,在创建student表的窗口中选中【触发器】选项卡分别在【触发器】选项卡的【名】、【触发】、【触发时机】等列里输入或选定相关信息在窗口下方的【定义】选项卡中指定触发器执行的SQL语句,然后单击【保存】按钮,该触发器创建成功02使用Navicat图形工具创建触发器查看触发器

查看触发器是指查看数据库中已存在的触发器的定义、状态和语法信息等。可以通过命令来查看已经创建的触发器。SHOWTRIGGERS;利用SHOWTRIGGERS语句查看通过SHOWTRIGGERS语句查看触发器的基本语法如下:查看触发器SELECT*FROMinformation_schema.triggers;在triggers表中查看触发器的信息

在MySQL中,所有触发器的定义都存在information_schema数据库下的triggers表中。查询triggers表,可以查看到数据库中所有触发器的详细信息。查询的语句如下:查看触发器SELECT*FROMinformation_schema.triggersWHEREtrigger_name='触发器名称';也可以查询指定触发器的详细信息,其语句的基本格式如下:其中,触发器名称要用单引号(‘’)引起来查看触发器SELECT*FROMinformation_schema.triggersWHEREtrigger_name='trig_teacher';例如,利用SELECT语句查询触发器trig_teacher的信息,代码执行如下:删除触发器DROPTRIGGER[dbname.]trig_name;使用DROPTRIGGER语句可删除当前数据库的触发器。其基本语法如下:其中,dbname表示数据库名,如果缺省,表示删除当前数据库中的触发器。trig_name表示要删除的触发器的名称删除触发器USEgradem;DROPTRIGGERtrig_teacher;例如,删除触发器“trig_teacher”,可以使用如下语句:创建和使用触发器【任务实施】王宁根据所学的触发器知识,写出了以下代码:(1)使用CREATETRIGGER语句创建触发器trig_classnumUSEgradem;CREATETRIGGERtrig_classnumAFTERINSERTONstudentFOREACHROWUPDATEclassSETnumber=number+1WHEREclassno=left(new.sno,8);创建和使用触发器【任务实施】(2)验证触发器是否会自动执行。在INSERT语句之前、之后各执行一条SELECT语句,比较一下插入记录前后处理状态的变化。具体验证步骤如下:①SELECTnumberas插入前班级人数FROMclassWHEREclassno='20200301';+----------------+|插入前班级人数|+----------------+|47|+----------------+1rowinset创建和使用触发器②INSERTINTOstudent(sno,sname,ssex)VALUES('2020030148','李勇','男');③SELECTnumbera

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论