数据库事务轻松走进数据库系列之十
事务的概念 :SQL 语句中一个执行单元,由一系列的 sql 语句组成。事务中的操作语句可作为一个不可分割的整体,要么全部执行,要么全部不执行。 事务好比把一系列的相关的SQL 语句捆绑在一起,一起执行,执行失败还可以人性化的回滚到操作之前,或者回滚到你
事务的概念:SQL 语句中一个执行单元,由一系列的sql语句组成。事务中的操作语句可作为一个不可分割的整体,要么全部执行,要么全部不执行。事务好比把一系列的相关的SQL 语句捆绑在一起,一起执行,执行失败还可以人性化的回滚到操作之前,或者回滚到你设置的保存点处。引入事务,使我们对数据库操作更加简单,且保证 了数据库的数据完整性。
在这个封装好的事务中,有完善的机能。
事务的分类:隐性事务,显式事务,自动提交事务。
各种事物的区分:
显式事务:有明显的sql语句标识:begin transaction开始和committransaction或者rollback transaction结束。
隐性事务(complicit transaction):1、在setimplicit_transaction on 语句之后进入隐性事务模式。
2、启动语句: altertable、open、drop、truncate table、insert、delete、select、create、grant、revoke、fetch、update。首次执行上述语句后,自动进入隐性事务,知道出现结束事务语句。
自动提交事务:一个sql语句完成都算是一个自动提交事务。成功完成,则提交成功,没有成功执行sql语句,则回滚该语句。这就是自动提交事务的功能。
注意:一般有明显的标志语句就是显示事务,其次是一些隐式事务的启动语句,暗示着隐式事务,在没有显式事务和隐性事务的时候才是发生自动提交事务。
事务的主要作用:避免数据的不一致。(触发器)
事务定义的语法:
为了更详细的了解事务是一系列SQL 语句的组成,我们再来看一个事务的简单例子。这个例子中,我们在部门表中把后勤部删除,同时也从员工表中把属于后勤部的员工给删除了,这是两天SQL 语句组成的事务,因为是一连串事件,所以封装在一个事务中,一起执行,这样就保证了数据的完整性,一致性。
事务回滚
事务在执行中,并不是每次都可以成功,由于一些原因,执行不成功,那么就是这个事务无法提交,为了保证数据的完整性,我们要执行事务回滚。打个比方,大家都在淘宝买东西,我们选好颜色,款式,数量后,提交订单,这就是一个事务,你的购物在店主那里都有记录,这就是一个事务,如果,你在操作过程中出现问题了,网页断开,或是停电,无法提交,那么你之前进行的操作也就不会保存,再次登入的时候,这些信息还需要填写。这就是事务回滚,他会自动回滚到操作之前。
语法:rollback transaction transaction_name|savepointname
其中,transaction_name是回滚到事务操作之前。
savepointname 是回滚到特点的位置,叫做保存点,保存点需要手动设置。
设置保存点
save transaction savepointname
在整个事务中,顺序是很重要的,先执行什么,后执行什么。保存点设置就是如此,在执行完那步之后设置保存点,那么事务就会回滚到设置保存点之前的那个操作。
最后让我们来看一个完整的例子,有事务封装,有保存点的设置,这个事务提交失败后,会回滚到删除完后勤部的位置。
看一下事务的完整操作:
分布式事务(distributed transaction)
前边讲的事务是处理一个服务器的数据,涉及到多个服务器的时候用到一类新的事物——分布式事务。
使用分布式服务器需要首先启动MSDTC服务。
执行时将begin transaction换成begin distributed transaction即可。