




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、sql server 2000触发器技术及应用目录摘要6关键词6abstract6key words 6引言6第一章 触发器的概念及原理 7 1.1触发器的概念 7 1.2触发器的原理 7第三章 触发器的创建、删除、修改 8 2.1特殊存储过程 8 2.2 inserted表和deleted表 8 2.3 inserted of和after触发器82.4 触发器的执行过程 82.5 使用t-sql语句来创建触发器 82.6 删除触发器 82.7 查看数据库中已有触发器 92.8 修改触发器: 92.9 相关示例 9第三章 触发器的应用实例 11结论13参考文献13致谢13sql server
2、2000触发器技术及应用 摘要: 触发器是sql server为应用程序开发人员提供的一种保证数据库中数据完整性的方法,它是一种特殊的存储过程。介绍了sql server触发器的概念和类型,总结了sql server触发器在程序设计中的应用,并给出了sql server触发器应用实例。关键词: sql server;after触发器;instead of触发器;数据完整性;数据库设计sql server 2000 flip-flop technology and application abstract: flip-flop is sql server for applications dev
3、elopers to offer a kind of guarantee database data integrity method, it is a special kind of storage process. introduced the sql server flip-flop, summarizes the concept and types of the flip-flop in the sql server application program design, and gives the sql server flip-flop application examplekey
4、words: sql server; xpa flip-flop; pack of flip-flop; data integrity; database design 引言:随着数据库在多种领域的广泛应用,数据库中数据的完整性越发显得重要,因此,在数据库中如何保证数据的完整性是数据库设计的重要内容之一,数据库的完整性是指数据库中数据的正确性、有效性和相容性,它是为了防止数据库中存在不符合语义规定的数据和防止系统输入/输出无效信息,在各种关系型数据库中为保证数据的完整性通常采用规则、check约束、默认、存储过程等方案。第一章 触发器的概念及原理11 触发器的概念触发器是sql server为
5、应用程序开发人员提供的一种保证数据库中数据完整性的方法,它是一种特殊的存储过程,但它和一般的存储过程有本质的区别,存储过程可以由用户直接调用执行,而触发器不能被直接调用执行。目前大多数关系型数据库系统均支持对数据库触发器的使用.触发器通过维持不同表中逻辑上相关数据的一致性,保持了数据的相关完整性。1.2 触发器的工作原理sql server 2000为每个触发器都创建两个由系统来维护的不允许用户直接进行修改的逻辑概念表,即deleted表和inserted表.它们存放于内存中,不存放在数据库中,这两个表的结构总是与被触发器作用的表的结构相同,以用于保存用户操作可能更改的行的旧值或者新值,触发器
6、工作完成后,与触发器相关的这两个表也被自动删除,而用户却不能对表中数据进行更改,inserted表用于存储insert和update语句所影响的行的副本,在一个插入或更新事务处理中,新建行被同时添加到inserted表和触发器表中。inserted表中的行是触发器表和新行的副本,deleted表用于存储delete和update语句所影响的行的副本,在执行delete和update语句时,行从触发器表中被删除,并传输到deleted表中,在对具有触发器的表(触发器表)进行操作时,其操作过程如下: 执行insert操作,插入到触发器表中的新行被插入到inserted表中; 执行delete操作,
7、从触发器表中删除的行被插入到deleted表中; 执行update操作,先从触发器表中删除旧行,然后再插入新行,其中被删除的旧行被插入到deleted表中,插入的新行被插入到inserted表中。第二章 触发器的创建、删除、修改1.1 触发器是一种特殊的存储过程:它不能被显式地调用而是在往表中插入记录更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。 1.2 sql server为每个触发器都创建了两个专用表inserted表和deleted表。这两个表由系统来维护它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行
8、完成后与该触发器相关的这两个表也被删除。deleted表存放由于执行delete或update语句而要从表中删除的所有行。inserted表存放由于执行insert或update语句而要向表中插入的所有行。1.3 instead of 和 after触发器sql server2000提供了两种触发器instead of 和after 触发器。这两种触发器的差别在于他们被激活的同 instead of触发器用于替代引起触发器执行的t-sql语句。除表之外instead of 触发器也可以用于视图用来扩展视图可以支持的更新操作。 after触发器在一个insert,update或deleted语句
9、之后执行进行约束检查等动作都在after触发器被激活之前发生。after触发器只能用于表。一个表或视图的每一个修改动作(insert,update和delete)都可以有一个nstead of 触发器,一个表的每个修改动作都可以有多个after触发器。1.4 触发器的执行过程如果一个insertupdate或者delete语句违反了约束那幺after触发器不会执行因为对约束的检查是在after触发器被激动之前发生的。所以after触发器不能超越约束。 instead of 触发器可以取代激发它的操作来执行。它在inserted表和deleted表刚刚建立其它任何操作还没有发生时被执行。因为in
10、stead of 触发器在约束之前执行所以它可以对约束进行一些预处理。 1.5 使用t-sql语句来创建触发器基本语句如下 create trigger trigger_name on table_name | view_name for | after | instead of insert, update,delete as sql_statement1.6 删除触发器:基本语句如下 drop trigger trigger_name1.7 查看数据库中已有触发器:- 查看数据库已有触发器use jxcsoftwaregoselect * from sysobjects where xty
11、pe=tr- 查看单个触发器exec sp_helptext 触发器名1.8 修改触发器:基本语句如下 alter trigger trigger_name on table_name | view_name for | after | instead of insert, update,delete as sql_statement 1.9 相关示例 1)在orders表中建立触发器当向orders表中插入一条订单记录时检查goods表的货品状态status是否为1(正在整理)是则不能往orders表加入该订单。create trigger orderinserton ordersafter
12、 insertas if (select status from goods,insertedwhere =inserted.goodsname)=1beginprint the goods is being processedprint the order cannot be committedrollback transaction -回滚避免加入end 2)在orders表建立一个插入触发器在添加一条订单时减少goods表相应的货品记录中的库存。create trigger orderinsert1on ordersafter insertasupdate goods
13、 set storage=storage-inserted.quantityfrom goods,=inserted.goodsname 3)在goods表建立删除触发器实现goods表和orders表的级联删除。create trigger goodsdeleteon goodsafter deleteasdelete from orders where goodsname in(select name from deleted) 4)在orders表建立一个更新触发器监视orders表的订单日期(orderdate)列使其不能手工修改.crea
14、te trigger orderdateupdateon ordersafter updateasif update(orderdate)beginraiserror( orderdate cannot be modified,10,1)rollback transactionend 5)在orders表建立一个插入触发器保证向orders表插入的货品名必须要在goods表中一定存在。create trigger orderinsert3on ordersafter insertas if (select count(*) from goods,inserted where goods.nam
15、e=inserted.goodsname)=0beginprint no entry in goods for this orderrollback transactionend6)orders表建立一个插入触发器,保证向orders表插入的货品信息要在order表中添加alter trigger addorderon ordersfor insert asinsert into orderselect inserted.id, inserted.goodname,inserted.number from inserted第三章 触发器的应用实例下面以“学生选课数据库”为例,介绍触发器的应用.
16、在学生选课数据库中有三个数据表,它们对应的表结构分别是: 学生信息表s(sno,sname,ssex,sage,sdep)其中sno表示学生学号,sname表示学生姓名,ssex表示学生性别,sage表示学生年龄,sdep表示学生所在系别; 课程信息表c(cno,cname,ccride,number),其中cn表示课程号,cname表示课程名,ccride表示该课程学分,number表示选修该课程的学生人数; 学生选课表sc(sno,cno,score),其中sno表示学生学号,cno表示课程号,score表示该生成绩。问题描述:利用触发器实现数据的完整性,即当向学生选课表中插入一条记录时,
17、在课程信息表中该课程的选修人数自动加1;当从学生选课表中删除一条学生选课记录时,在课程信息表中该课程选修人数自动减1;当某个学生修改自己选修的课程号时,在课程信息表中,原来该课程选修人数自动减1,新修改后的课程号人数自动加1,本例将分别创建insert触发器、delete触发器、update触发器,以保证用户进行相应操作时实现表间相关数据的自动更新。1)insert触发器代码create trigger anum on scafter insert/*插入数据成功以后触发*/asdeclarecno char(10)selectcno=cno from inserted/*将插入的数据中课程号
18、取出保存到变量中*/update c set number=isnull(num,0) 1where cno=cno/*将该课程选修人数加1*/go2)delete触发器代码create trigger delnum on scafter delete /*删除数据成功以后触发*/asdeclarecno char(10)selectcno=cno from deleted/*将删除的课程号取出保存到变量中*/update c set num=isnull(num,0)?1where cno=cno/*将该课程选修人数减1*/go3)update触发器代码create trigger upnu
19、m on scafter update /*修改数据成功以后触发*/asdeclarecno1 char(10),cno2 char(10)if update(cno)/*判断是否修改了学生选课表中的课程号列*/beginselectcno1=cno from deleted/*存储修改前的课程号数据*/update c set num=isnull(num,0)-1/*将修改前的课程选修人数减1*/where cno=cno1selectcno2=cno from inserted/*存储修改后的课程号数据*/update c set num=isnull(num,0) 1/*将修改后的课程
20、选修人数据加1*/where cno=cno2end说明:当利用update语句从学生选课表中修改某个学生选修课的课程号时,该触发器被激活.从以上触发器的典型应用中可以看出,在数据库中处理复杂的表与表间逻辑关系时,触发器能使数据库的设计变得简洁和高效。结论:这次题目的内容是从数据库、数据表的创建和修改开始的,表是建立关系数据库的基本结构,用来存储数据具有已定义的属性,在表的操作过程中,有查看表信息、查看表属性、修改表中的数据、删除表中的数据及修改表和删除表的操作。从实训中让我更明白一些知识,表是数据最重要的一个数据对象,表的创建好坏直接关系到数数据库的成败,表的内容是越具体越好,但是也不能太繁
21、琐,以后在实际应用中多使用表,对表的规划和理解就会越深刻。我们实训的另一个内容是数据库的约束、视图、查询。从中我们了解到查询语句的基本结构,和简单select语句的使用,多表连接查询。而在视图的操作中,也了解到了视图是常见的数据库对象,是提供查看和存取数据的另一种途径,对查询执行的大部分操作,使用视图一样可以完成。使用视图不仅可以简化数据操作,还可以提高数据库的安全性,不仅可以检索数据,也可以通过视图向基表中添加、修改和删除数据。存储过程、触发器也是我们实训的内容之一, 在操作中有建立存储过程,执行存储过程,及查看和修改存储过程,这些都是非常基础的东西,但对用户却是非常重要的呢,只有熟悉了t_sql语言,才能更好的掌握更多的东西。我们还学习了,sql管理、数据的导入、导出、备份和还原。有sql server 安全访问控制;登录账户的管理;数据库角色的管理;用户权限管理。维护数据库的安全是确保数据库正常运行的重要工作。数据的备份是对sql server数据事务日志进行拷贝,数据库备份记录了在进行备份操作的数据库中所有数据的状态。而数据的备份还分为数据库完整备份、差异备份、事务日志备份、文件及文件组备份。做数据备份就是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人造草坪的表面涂层技术进展考核试卷
- bt施工招标合同标准文本
- 供应建筑垃圾合同标准文本
- 渔业节能减排设备考核试卷
- 出版合作合同标准文本
- 二手货车转让合同范例
- 书本销售合同范例
- 众筹借贷合同范例
- 光缆回收销售合同标准文本
- 健身股东合同标准文本
- 劳动法与社会保障法课程教学大纲
- 数字取证的云计算取证技术
- AI在药物研发中的应用
- 第20课国民革命与南京政府的统治【中职专用】(高教版2023基础模块)
- 安全生产档案管理的培训指导
- 【复习资料】10633工程造价管理(习题集及答案)
- 钩虫病护理课件
- 维生素D在儿科的应用课件
- 形势与政策(吉林大学)智慧树知到课后章节答案2023年下吉林大学
- 质量控制计划QCP
- 纳税人进项税额分摊方式备案报告表(样本)
评论
0/150
提交评论