基于Trigger的数据库自动更新

来源 :北京电力高等专科学校学报 | 被引量 : 0次 | 上传用户:psyche_runner
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  在各个领域,人们对数据的安全性提出了很高的要求,人为地传递数据已不是一个现实问题,尤其是在一个数据信息发生改变,直接影响到其他一连串的数据信息发生变化,数据库如果没有自动的更新功能实现,将无法预知数据发生变化之后的结果。
  一、SQL Server数据库自动更新
  SQL Server是一个高性能的客户端/服务器结构的关系数据库管理系统,它能够同多种操作系统兼容,[2]它为用户提供了一种强大的数据库管理功能。提供了数据的网络安全性和数据的自动更新。它主要应用于现代中小型数据库的开发。
  在SQL Server2000中数据的更新检查,常用的方法是通过表之间的级联关系(参照关系)来实现,它主要实现主表与从表之间主码与外码的检测,是无法实现非主键的检查,更无法实现主表中非主键值发生变化导致从表中数据的自动更新。数据的更新关联,可以通过一种特殊的存储过程---触发器来实现。
  二、SQL Server中trigger自动更新功能的原理
  (一)trigger类型
  SQL Server数据库中trigger是绑定在相应的表上的,有Insert、Delete、Update三种类型的trigger [1]。
  Insert触发器是当用户向建立了Insert触发器的表上,添加记录时,自动执行的功能部分。它被触发之后,会产生一个Inserted表,自动存放被添加的记录信息。
  Delete触发器是当用户删除建立了Delete触发器的表上记录信息时(不能使用TRUNCATE TABLE语句),自动执行该trigger,它被触发之后,会产生一个Deleted表,自动存放从表中被删除的记录信息。
  Update触发器是当用户修改建立了Update触发器的表中记录时,自动执行的trigger。它被触发之后,会产生一个Inserted表,用来自动存放修改之后的记录,一个Deleted表,用来存放修改之前的记录。
  (二)trigger对数据的自动更新过程
  设想数据库中有三个表,三个表中数据相互关联,如关联表图所示。
  1、表的关联关系。(1)表I中的数据直接同表II中的数据相关联,表I中的数据直接来源于表II;(2)表II中的数据直接同表III中的数据相关联,表II中的数据直接来源于表III;(3)表I中的数据同表III中数据间接关联,表I中的数据间接来源于表III。
  2、表的传递关系。(1)当更新表III中的数据信息,表II中的相关记录信息发生变化;(2)当更新表II中信息,表I中相应的信息发生变化;(3)当更新表III中数据,表I、表II中相应数据信息发生变化。
  3、建立trigger。为了保持表I(或表II)中数据信息与表II(或表I)中数据信息的一致性,首先在表III(或表II)上建立相应的触发器(Insert,Delete,Update),在触发器中编写相应的表III(或表II)发生变化后促使表II(或表I)中信息发生变化的操作语句序列。从而保证在表III(或表II)中数据发生变化之后,表II(或表I)中的数据信息也随着被自动更新。
  三、trigger自动更新实现
  (一)示例表
  已知有镇表、村表和居民信息表,表结构如表1、表2和表3所示。镇表中包含镇编号、镇名、镇占地面积三个字段,村表中包含村编号、村名称、村占地面积和所属镇四个字段,居民信息表中包含住户编号、住户名、居住面积和所属村四个字段。
  说明:镇表中的镇占地面积=村表中所属镇相同的村占地面积之和,村表中的村占地面积=居民信息表中所属村相同的居民占地面积之和。
  (二)创建触发器
  1、创建Insert触发器和Update触发器
  当向居民信息表中添加记录信息,要使得村表中的村占地面积自动发生变化,而村表中占地面积发生变化,使得镇表中镇占地面积发生变化,首先给居民信息表创建Insert触发器,然后给村表创建update触发器,居民信息表Insert触发器,如代码段1所示。
  create trigger jmxb on 居民信息表 for insert
  as
   update 村表
   set 村表.村占地面积=村表.村占地面积+(select sum(inserted.居住面积) from inserted group by 所属村 )
   where 村表.村编号=(select 所属村 from inserted)
  go
  代码段1添加记录信息触发器
  当向居民信息表中添加记录信息,自动触发触发器jmxb,通过代码中的"Group By 所属村"将添加记录按所属村进行分组,然后通过"sum(居住面积)"求添加记录中所属各个村的居住面积,最后将对应村的面积累加到村表的村占地面积中。
  此时村表中某村的占地面积发生了变化,这时镇表中相应镇(等于村表中数据发生变化的所属镇)的占地面积也应该随之发生改变。所以必须建立村表的Update触发器,如代码段2所示。
  create trigger cb on 村表 for update
  as
   update 镇表
   set 镇表.镇占地面积=镇表.镇占地面积-(select sum(deleted.村占地面积) from deleted group by 所属镇)+(select sum(inserted.村占地面积) from inserted group by 所属镇)
  where 镇表.镇编号=(select 所属镇 from inserted)
  go
  代码段2 村表的Update触发器
  当村表中的记录信息发生改变,自动触发触发器cb,实现镇表中占地面积的自动更新。
  2、添加记录,实现数据自动更新
  通过"insert 居民信息表 values('002A03','刘平',100.2, '002A')"语句向居民信息表中添加记录,村表与镇表中数据自动更新后的结果如表6所示。
  3、创建Delete触发器
  当删除居民信息表中记录信息时,要村表中村占地面积会被减少,从而使得镇表中镇占地面积减少。首先给居民信息表建立Delete触发器,再给村表建立Update触发器。居民信息表Delete触发器,如代码段3所示。
  create trigger del on 居民信息表 for delete
  as
  update 村表
  set 村表.村占地面积=村表.村占地面积-(select sum(deleted.居住面积) from deleted group by 所属村 )
  where 村表.村编号=(select 所属村 from deleted)
  代码段3删除记录信息触发器
  删除居民信息表中记录信息,自动触发触发器del,通过代码中的"Group By 所属村"将删除记录按所属村进行分组,然后通过"sum(居住面积)"求删除记录中所属各个村的居住面积,最后将对应村的面积从村表的村占地面积消除。
  此时村表中某村的占地面积发生了变化,这时镇表中相应镇(等于村表中数据发生变化的所属镇)的占地面积也应该随之发生改变。由于村表中已经建立了Update触发器cb,一旦村表中村占地面积信息被修改,则自动执行触发器cb,实现镇表中占地面积的改变。
  4、删除记录,实现数据自动更新
  使用语句"Delete 居民信息表 where 住户编号='001A02'"实现居民信息表中住户编号为"001A02"的住户信息的删除,村表中村编号为"001A"的占地面积和镇表中镇编号为"001"的占地面积相应的发生变化,如表7所示。
  5、创建Update触发器
  当修改居民信息表中记录信息时,村表中村占地面积可能会发生变化,从而使得镇表中镇占地面积发生变化。要实现该功能,首先给居民信息表建立Update触发器,如代码段4所示,再给村表建立Update触发器。
  create trigger upd on 居民信息表 for update
  as
  update 村表
  set 村表.村占地面积=村表.村占地面积-(select sum(deleted.居住面积) from deleted group by 所属村 )+(select sum(inserted.居住面积) from inserted group by 所属村 )
  where 村表.村编号=(select 所属村 from deleted)
  代码段4修改记录信息触发器
  修改居民信息表中记录信息,自动触发触发器upd,通过代码中的"Group By 所属村"将修改记录按所属村进行分组,然后通过"sum(居住面积)"求修改记录中所属各个村的居住面积。deleted表中存放修改之前的记录信息,inserted表中存放修改之后的记录信息,语句中通过减去修改之前的记录信息,然后加上修改之后的记录信息,从而实现了村表中数据和居民信息表中数据的一致性。
  此时村表中某村的占地面积发生了变化,这时镇表中相应镇(等于村表中数据发生变化的所属镇)的占地面积也应该随之发生改变。由于村表中已经建立了Update触发器cb,一旦村表中村占地面积信息被修改,则自动执行触发器cb,实现镇表中占地面积与村表中占地面积的一致性。
  6、修改记录,实现数据自动更新
  使用语句"Update 居民信息表 Set 居住面积=45where住户编号='001A01'"实现居民信息表中住户编号为"001A01"的住户信息的修改,村表中村编号为"001A"的占地面积和镇表中镇编号为"001"的占地面积相应的发生变化,如表8。
  四、结束语
  给表建立触发器,一旦触发器相关联的表中数据信息的变化,必然会导致触发器语句中相关联表中的数据信息发生改变,从而实现数据的自动更新。
  
  参考文献:
  [1]郑阿奇.SQL SERVER实用教程[M].北京:电子工业出版社,2001.
  [2]微软公司.数据库程序设计:SQL Server2000数据库程序设计[M].北京:高等教育出版社,2004:437-456.
其他文献
一、引言  随着社会的发展,高校的基础设施也得到快速发展。新教学楼的建立和现代化设备的配备为当代的大学生提供了良好的受教育环境。教室是学校进行各种教学活动的基础资源,当今高校的教室资源随着高校的发展有了很大改观,许多教室都由原来只有黑板和桌椅的普通教室变成了功能强大的多媒体教室,课堂教学、考试、讲座、自习、报告、讲座、会议、学生社团活动等形式多样的教学活动都可以在这些教室中进行。高校作为教学用的教
期刊
伴随着世界经济的发展和我国电力企业的体制改革进一步深入,供电企业也逐步走向市场化,我国计划经济下传统的垄断经营观念、意识、作风已完全不能适应新的市场经济发展的要求,这就要求供电企业树立全新的服务观念,建立全面、高效、完善的客户服务体系。  一、供电企业"三不指定"规定全面树立了客户服务的理念  国家电力公司于2001年1月16日出台《关于开展电力市场整顿和优质服务年活动的决定》的规定:在报装工程中
期刊
一、引言   1999年高校扩招,目前全国高校在校人数达2300万。高等教育大众化给大学英语课堂带来挑战班级人数从40到200不等。这一环境下许多高校采取上合班大课的方法进行教学改革。David Hayes认为包含50名或更多学生的班级就可以定为大班。[1]但从英语教学规律来看班级人数规模在30人左右是最理想的。英语是一门实践性很强学科,听、说、读、写、译各方面都需要大量的练习,学生多说多练,参与
期刊
教学是教师的教与学生的学生的统一,这种统一的实质是互动。把教学本质定位为互动,是对教学过程的正本清源。而在传统的教学中,教学就是教师对学生单向的"培养"活动,它表现为两个方面:一是以教为中心,学围绕教转;二是以教为基础,先教后学。这种传统的教学只是教与学两方面的机械叠加。通过对化学教学中师生互动的实践研究,作者认为:在教学过程中合作互动,有利于教学目标的实现,能充分体现教育的价值,有利于学生创造性
期刊
一、国外城镇化的两种典型模式  从发达国家城市发展的历程来看,城市的成长和成熟都是市场自发行为的结果。按照政府与市场机制在城镇化进程中的作用、城镇化进程与工业化和经济发展的相互关系,可以概略地将世界城镇化发展概括为以西欧、日本为代表的政府调控下的市场主导型城镇化,以美国为代表的自由放任式的城镇化,以拉美和非洲部分国家为代表的受殖民地经济制约的发展中国家的城镇化等三种模式。  (一)政府调控下的市场
期刊
一、前言  听力作为二语习得中一项基本语言技能越来越受到外语学习者的重视。各种英语水平考试都把听力理解作为一项重要的考核内容。然而我国大多数学生最惧怕听力。大学生英语能力调查显示,听的成绩也是听、读、写、译四项成绩中最弱的。为了提高听力教学水平,过去50年国内对听力教学进行了大量的研究,并且有了长足的进步。  最初的听力教学理论认为听力理解只是机械地输入,是被动地、消极的接受语言刺激。然而随着研究
期刊
斯托利亚指出:数学教育是数学活动的教育,也就是思维活动的教育。如何在小学数学教学中实施创新教育,引导学生主动地创造性地学习数学,是当前小学实施素质教育的重要课题。我认为,实施创新教育,就是创设自由、和谐、开放、民主的学习氛围,让每个学生注定积极参与数学学习活动,为每个学生提供创造发展的机会,让学生在合作、探索的情境中,获取基础知识和思维方法,使他们获得成功的情感体验,培养学生的创新意识,发展创新能
期刊
众所周知,英语是一门语言学科,英语课程的学习,既是学生通过英语学习和实践活动,逐步掌握英语知识和技能,提高语言实际能力运用的过程;又是他们磨砺毅志、陶冶情操、拓展视野、丰富生活经历、开发思维能力、发展个性和提高人文素质的过程。[1]这个过程是一个艰苦而漫长的过程。学习语言,需要有环境,环境对语言学习的影响是相当大的。对非英语国家的学生,犹其对于比较落后、贫穷的山区学生来说,更是如此。  在这种情况
期刊
在急躁冒进的氛围中,人们鄙视邓子恢等党内同志的诤言,在手工业小生产没有变更的条件下,快速地实现了合作化、人民公社化,取消了农民的小土地私有权,消灭了土地私有制。但是,凭人的主观意志,没有现代先进生产力为基础,只能制造出落后的生产模式。人民公社是一种类似于西欧的庄园经济的经济,远远落后于早已在中国历史上存在的手工业小生产的个体经济。从一开始,中国农民就对人民公社有反感,二十世纪八十年代初,终于从它的
期刊
一、前言  近年来,随着报纸、广播电视及因特网媒体的迅速发展,带有时代色彩的时髦词汇和新词语不断地涌现出来。这些时髦词汇不仅与特定的时代背景密切相关,也极大地反映了一大批新时代产生的重要事物。但由于时髦词汇的翻译离不开汉英两种语言相关的文化环境,因此在进行时髦词汇的翻译时,除了要从语义的角度采用一定的翻译技巧之外,还要着重考虑两种语言之间的文化差异。  二、时髦词语出现的几大特点  (一)反映出新
期刊