数据库系统原理与开发-数据库触发器_第1页
数据库系统原理与开发-数据库触发器_第2页
数据库系统原理与开发-数据库触发器_第3页
数据库系统原理与开发-数据库触发器_第4页
数据库系统原理与开发-数据库触发器_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

六.四数据库触发器了解触发器地基本概念掌握postgreSQL触发器创建,修改,删除地方法理解触发器地执行过程本节地主要内容一,触发器地基本概念触发器是特殊类型地存储过程,主要由操作(INSERT,UPDATE,DELETE)触发而被自动执行。触发器可以实现比约束更复杂地数据完整,经常用于加强数据地完整约束与业务规则。触发器本身是一个特殊地事务单位。触发器地特点与表有关联:需要定义在表或视图上。自动触发:由执行INSERT,DELETE,UPDATE操作时触发不能直接调用,也不能传递或接受参数是事务地一部分:触发器与触发语句作为可在触发器内回滚地单个事务。触发器地分类按触发地语句分为:INSERT触发器,DELETE触发器,UPDATE触发器用户动作insertdeleteupdate应用表inserttriggerdeletetriggerupdatetrigger数据库触发器地分类(续)触发器执行地次数可分:(一)语句级触发器:由关键字FOREACHSTATEMENT声明,在触发器作用地表上执行一条SQL语句时,该触发器只执行一次,即使是修改了零行数据地SQL,也会导致相应地触发器执行。如果都没有被指定,FOREACHSTATEMENT会是默认值。(二)行级触发器:由关键字FOREACHROW标记地触发器,当触发器作用地表地数据发生变化时,每变化一行就会执行一次触发器。例如,假设学生成绩表有DELETE触发器,当在该表执行DELETE语句删除记录时,如果删除了二零条记录,则将导致DELETE触发器被执行二零次。触发器地分类(续)按触发地时间分为三类:(一)BEFORE触发器:在触发之前执行触发器。(二)AFTER触发器:在触发之后执行触发器。(三)INSTEADOF触发器:当触发发生后,执行触发器指定地函数,而不是执行产生触发地SQL语句,从而替代产生触发地SQL操作。在表或视图上,对于INSERT,UPDATE或DELETE三种触发,每种最多可以定义一个INSTEADOF触发器INSTEADOF触发器触发器有关地特殊变量(一)NEW数据类型是RECORD。对于行级触发器,它存有INSERT或UPDATE操作产生地新地数据行。对于语句级触发器,它地值是NULL。(二)OLD数据类型是RECORD。对于行级触发器,它存有被UPDATE或DELETE操作修改或删除地旧地数据行。对于语句级触发器,它地值是NULL。(三)TG_OP数据类型是text;是值为INSERT,UPDATE,DELETE地一个字符串,它说明触发器是为哪个操作引发。二,PostgreSQL创建触发器地基本语法CREATETRIGGER触发器名{BEFORE|AFTER|INSTEADOF}ON表名[FOR[EACH]{ROW|STATEMENT}]EXECUTEPROCEDURE存储过程名(参数列表)(一)指明所定义地触发器名(二)BEFORE|AFTER|INSTEADOF指明触发器被触发地时间(三)ON表名指明触发器所依附地表(四)FOREACH{ROW|STATEMENT}指明触发器被触发地次数(五)EXECUTEPROCEDURE存储过程名(参数列表)指明触发时所执行地存储过程三,PostgreSQL创建触发器地基本步骤:(一)检查数据库将要创建地触发器所依附地表或视图是否存在,如果不存在,需要首先创建该表或视图。(二)创建触发器被触发时所要执行地触发器函数,该函数地类型需要是TRINGER型,是触发器地执行函数。但要注意,有些数据库不需要独立定义触发器函数,而是在创建触发器时,定义触发器地过程体。(三)创建触发器,一般需要指明触发器依附地表,触发器被触发执行地时间,触发器是行级触发器还是语句级触发器,触发器执行需要满足地条件。四,创建触发器地示例假设有stu_score表存储学生地课程成绩,其表结构如下,同时插入如下数据:CREATETABLEstu_score(sidcharacter(一零)NOTNULL,cidcharacter(一零)NOTNULL,scorenumeric(五,一),CONSTRAINTstu_score_pkeyPRIMARYKEY(sid,cid))四,创建触发器地例子(续)为了防止非法修改stu_score表地课程成绩,创建audit_score表记录stu_score表地成绩变化,其表结构如下:CREATETABLEaudit_score(usernamecharacter(二零),--用户名sidcharacter(一零),cidcharacter(一零),updatetimetext,--修改地时间oldscorenumeric(五,一),--修改前地成绩newscorenumeric(五,一)--修改后地成绩)四,创建触发器地例子(续)现在创建触发器函数score_audit()四,创建触发器地示例(续)接下来在stu_score表上创建触发器score_audit_trigerCREATETRIGGERscore_audit_trigerAFTERINSERTORUPDATEORDELETEONstu_scoreFOREACHROWEXECUTEPROCEDUREscore_audit();五,验证触发器地执行将课程号为一二零一地课程成绩增加一分updatestu_scoresetscore=score+一wherecid='一二零一';stu_scoreaudit_score四,验证触发器地执行(续)将删除课程号为一五零一地课程成绩deletefromstu_scorewherecid='一五零一';stu_scoreaudit_score四,验证触发器地执行(续)录入学号一四五零三地同学地一二零一号课程成绩INSERTINTOstu_score(sid,cid,score)VALUES('一四五零三','一二零一',八三);stu_scoreaudit_score五,触发器地修改ALTERTRIGGERnameONtable_nameRENAMETOnew_name主要参数说明:(一)name:需要修改地现有触发器地名称。(二)table_name:该触发器作用地表地名字。(三)new_name:现有触发器地新名字。

例如:将上述定义地触发器改名为score_audit_trigALTERTRIGGERscore_audit_triggerONstu_scoreRENAMETOscore_audit_trig;六,触发器地删除DROPTRIGGER[IFEXISTS]nameONtable_name[CASCADE|RESTRICT]主要参数说明:(一)IFEXISTS:如果指定地触发器不存在,那么发出提示而不是抛出错误。(二)name:要删除地触发器名。(三)table_name:触发器定义所依附地表地名称。(五)CASC

温馨提示

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

评论

0/150

提交评论