标签:
数据库事务是指作为单个逻辑工作单元执行的一系列操作。
为什么要有事务?
假设我们在进行银行转帐的时候,至少会执行两条SQL语句,一条SQL语句是减少转帐人里帐户的钱,一条是增加收帐人里帐户钱。 例如有一个朋友要转帐1000元:1、那么转帐人的银行里的钱减少1000
2、那么收帐人的银行里的钱增加1000
我们往深一点想,在执行这两条SQL语句的时候,会不会发生问题?会,有时候天灾,人祸的。例如。在执行第一条SQL语句的时候,就在这0.001秒之间机器突然出现故障,那么这时候有可能第二条SQL语句没有执行。那这时候转帐人不就很惨,他自己转帐了1000元,自己帐户已经扣了钱,可是对方的帐户没收到钱,那么对方会很生气的认为你没有给他转帐。
这还是两条SQL语句出现问题的情况,试想如果银行在处理事务时有100条SQL语句要执行,每条都很重要,那么出现问题的概率不是更大了吗?为了针对这种情况出现了事务。
那么什么是事务?
事物是指访问并可能更新数据库中各种新据项的一个程序执行单行(UNIT),也就是由多个SQL语句组成,必需作为一个整体执行。 事物说白了一点,就是同生共死,意思要么全部的SQL语句都执行成功,要么全部的SQL语句都执行失败。所以为了防止上面那种情况,要么两条SQL语句都执行成功,要么两条SQL语句都执行失败。
通过例子来了解一下事务,在举个例子前先看一下,先看几个事务常用到的词
当没有发生错误的时候便可以将事务进行提交(CIMMIT TRANSACTION),而查看有没有SQL语句的执行错误,可以用 @@ERROR来进行查看。当发生错误的时候便使用(ROLL BACK TRANSACTION)将SQL语句回滚到最最之前,没有执行SQL语句那时候。
--事务 --开始事务 begin tran(transaction) --提交 commit --回滚 rollback select * from Car select * from Brand begin transaction --开始事务 delete from Car where Code=‘c005‘ delete from Brand where Brand_Code=‘b002‘ if @@ERROR=0--判断是否出错,如果执行没错@@ERROR为0 begin commit -- 提交事务 end else begin rollback--回滚事务 end --try catch begin transaction --开始事务 begin try --try里面写要执行的代码 delete from Car where Code=‘c005‘ delete from Brand where Brand_Code=‘b002‘ commit end try begin catch rollback end catch
标签:
原文地址:http://www.cnblogs.com/franky2015/p/4668758.html