`
chenxueyong
  • 浏览: 337447 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

数据库触发器与事务

阅读更多

当对数据库中的一张表进行操作且同时又要对与之相关的其他表的数据进行修改时,要如何操作呢?一种方法是写出每一个操作的SQL语句,然后逐一执行。但是,如果碰到银行转账这种业务,我们需要先从A帐户扣钱,然后给B帐户加钱。若A帐户扣钱成功但是B帐户加钱失败,我们还得再多写一条SQL用以在失败的时候再把A的钱给加上。这样太麻烦而且需要我们在底层写很多数据库操作代码,容易出错也不安全。
此时就可以用触发器与事务来处理,当对A帐户进行修改时自动触发执行对B帐户的修改,并且当其中任何一个操作失败时,事务会自动回滚,取消之前所有的操作,这样就无形的减少了不少代码及安全隐患。
我所做的项目就有这样的一个需要:有一个文章表和一个文章类别表,文章类别表中有个字段用于存储该类别下的文章数量。所以,增加或删除一篇文章同时需要对类别表进行修改,只需要使用如下的代码创建一个触发器即可。

 
  1. CREATE TRIGGER trig_Article_Ins–开始创建触发器
  2. ON dbo.blog_Article–指明要对哪个表创建
  3. FOR INSERT–创建INSERT类型的触发器
  4. AS
  5. BEGIN TRANSACTION–开始事务
  6.     DECLARE @cateId int,@errorSum int–声明变量,分别用于存储类别ID和错误统计
  7.     SET @errorSum = 0–错误统计初值为0
  8.     SELECT @cateId=log_CateID FROM inserted–查到新插入的文章的类别ID
  9.     SET @errorSum=@errorSum+@@ERROR–累计错误
  10.     UPDATE blog_Category SET cate_Count=cate_Count+1 WHERE cate_ID=@cateId–对相应的表进行更新
  11.     SET @errorSum=@errorSum+@@ERROR–累计错误
  12.     
  13.     IF @errorSum <> 0–若执行期间出现错误则回滚,否则提交事务
  14.         BEGIN
  15.             print ‘创建失败,回滚事务!’
  16.             ROLLBACK TRANSACTION
  17.         END
  18.     ELSE
  19.         BEGIN
  20.             print ‘创建成功,提交事务!’
  21.             COMMIT TRANSACTION
  22.         END
  23. GO

 

另外,使用这个还有另外一个原因:好久没有写过这些东西了,该练练手了。所以,今天在编写这个触发器的时候还小查了一下帮助手册。

分享到:
评论

相关推荐

    数据库触发器、存储过程、事务管理PPT

    数据库触发器、存储过程、事务管理PPT,不介绍数据库基础,只介绍相关技术。

    神通数据库-数据库快速入门.pdf

    神通数据库触发器按照所触发动作的间隔尺寸可以分为语句级触发器和行 级触发器。触发器由 CREATE TRIGGER 语句定义,FOR EACH 子句定义了触发动作的间隔尺寸,它既 可以是 FOR EACH STATEMENT(语句级触发器),也...

    数据库实例整理包括 触发器 事务

    自己整理的关于数据库的实例 包括 触发器 事务 的一个实例

    数据库事务处理和触发器实验.doc

    数据库事务处理和触发器实验

    SQL Server触发器及触发器中的事务学习

    在这边文章里面,我不会从触发器和事务的概念去讲述,而是从常见的两种触发器类型(DML触发器 & DDL触发器)和After触发器 & Instead Of 触发器的应用不同,开始说起它们,然后是说与事务有关的故事。如果,你有什么...

    数据库面试题触发器SQL优化

    数据库基础知识,mysql引擎,索引,事务,锁,视图,游标,存储过程,触发器,查询,数据类型,SQL优化,数据库优化 使用AbstractRoutingDataSource+aop+annotation在dao层决定数据源。 如果采用了mybatis, 可以将...

    Sql存储过程、触发器、事务1

    简介事务日志是一个数据库的数据修改历史,在创建一个数据库时,会自动创建一个事务日志文件采用提前写的方式,即对数据库的修改,首先会写入到日志中,然后才写入数据库。

    数据库开发及ADO.Net_2_高级事务sql编程存储过程视图触发器

    数据库开发及ADO.Net_2_高级事务sql编程存储过程视图触发器

    数据库期末项目(教学事务管理系统).zip

    本学期分组完成“教学事务管理系统”,具体要求如下: 1. 系统必须是在B/S结构下实现。 2. 数据库在原理1的School数据库基础下...8. 数据库中至少包含一个触发器和一个存储过程在系统中使用和调用。 9. 其他辅助功能。

    Oraclet中的触发器

    当一个基表被修改时要执行的存储过程,执行时根据其所依附的基表改动而自动触发,因此与应用程序无关,用数据库触发器可以保证数据的一致性和完整性。 每张表最多可建立12 种类型的触发器,它们是: BEFORE INSERT ...

    实验六-触发器实验报告.doc

    建立触发器 CREATE [OR REPLACE] TRIGGER &lt;触发器名&gt; BEFORE"AFTER INSERT"DELETE"UPDATE OF &lt;列名&gt; ON &lt;表名&gt; [FOR EACH ROW] WHEN (&lt;条件&gt;) 程序块&gt; ON 子句中的名称识别与数据库触发器关联的数据库表 触发器事件...

    oracle实验5-存储过程与触发器.doc

    本实验五 - 存储过程与触发器旨在掌握 Oracle 数据库编程语言 PL/SQL 的基础知识,掌握游标的四个使用步骤,掌握触发器的原理,学会定义触发器,以及掌握存储过程的定义方法和执行方法。通过本实验,我们可以更好地...

    大学 数据库 实验 报告 数据库原理实验

    删除数据库:在“数据库”处单击右键,选中“删除” 新建表:双击数据库,然后双击“表”进入,在单击右键“新建表” 4)在企业管理器下创建一个服务器组group1,在这个组下注册一个服务器。查看有哪些数据库及...

    《SQL Server数据库管理与开发》PPT

    及事务,数据库访问的安全性;第五部分,讲解数据库管理的备份恢复、导入导出与分离 附加,代理与复制;第六部分,给出了一套数据库应用系统的完整的案例及其源代码:教 学成绩管理系统的VB 实现与ASP实现;最后提供...

    SQL Sever 2000中基于触发器实现数据库的完整性.pdf

    这个触发器将检查Orders表中的OrderDate字段是否小于2000-01-01,如果是,则回滚事务。 此外,我们还可以使用触发器来实现业务逻辑。例如,下面是一个自动计算总金额的触发器: ```sql CREATE TRIGGER trg_...

    SQL Server数据库管理与开发PPT

    第8~10章,讲解自定义函数、存储过程和触发器,游标及事务,数据库的安全性;第11、12章,给出[教学成绩管理系统(VB+ASP)]数据库应用系统的完整案例及其源代码;最后在附录中提供了三个具有特色的辅助教学软件:SQL...

    Oracle 10g数据库管理、应用与开发标准教程

    Oracle关系数据库,Oracle数据库体系结构,SQL基本查询,修改SQL数据与SQL*Plus命令,PL/SQL编程基础,用户、模式和表,高级查询,过程、函数和程序包,表类型,索引,视图、序列和同义词,触发器,事务与并发控制,...

    数据库系统原理与设计复习重点.ppt

    本资源为数据库系统原理与设计的复习重点,涵盖了数据库系统概论、关系模型与关系代数、SQL查询语言、数据库建模、关系数据理论与模式求精、SQL 数据定义、更新及数据库编程、事务管理与恢复等八个章节的关键内容。...

    SQL+Server的事务、游标、存储过程及触发器.doc

    关键字:事物、游标、存储过程、触发器引言:在关系数据库系统中,事务指的是组成为独立单元的一个或多个SQL操作的可恢复的序列。对数据库的任何一次读或写都是在某次事务内完成的。游标类似一个指针,指向某一个...

Global site tag (gtag.js) - Google Analytics