事务:保持逻辑数据一致性与可恢复性,必不可少的利器。
1.常用语句就四个。
Begin Transaction:标记事务开始。
Commit Transaction:事务已经成功执行,数据已经处理妥当。
Rollback Transaction:数据处理过程中出错,回滚到没有处理之前的数据
状态,或回滚到事务内部的保存点。
Save Transaction:事务内部设置的保存点,就是事务可以不全部回滚,只
回滚到这里,保证事务内部不出错的前提下。
2.事务具有原子性,一致性,隔离性,持久性。
原子性:事务必须是一个自动工作的单元,要么全部执行,要么全部不执行。
一致性:事务结束的时候,所有的内部数据都是正确的。
隔离性:并发多个事务时,各个事务不干涉内部数据,处理的都是另外一个事
务处理之前或之后的数据。
持久性:事务提交之后,数据是永久性的,不可再回滚
3.设置 xact_abort on/o , 指定是否回滚当前事务,为 on 时如果当前 sql 出错,
回滚整个事务,为 o 时如果 sql 出错回滚当前 sql 语句,其它语句照常运行读写
数据库。
语法:
set xact_abort o
begin tran
·····
commit tran
4.所谓事物隔离级别,就是并发事务对同一资源的读取深度层次。分为 5 种。
read uncommitted:这个隔离级别最低啦,可以读取到一个事务正在处理
的数据,但事务还未提交,这种级别的读取叫做脏读。
read committed:这个级别是默认选项,不能脏读,不能读取事务正在处理
没有提交的数据,但能修改。
repeatable read:不能读取事务正在处理的数据,也不能修改事务处理数据
前的数据。
snapshot:指定事务在开始的时候,就获得了已经提交数据的快照,因此当
前事务只能看到事务开始之前对数据所做的修改。
serializable:最高事务隔离级别,只能看到事务处理之前的数据。
语法
set tran isolation level <级别>
下表是这四种事务隔离级别对脏读、不可重复读和幻读的支持情况:
隔离级别
脏读(Dirty
read)
不可重复读(Non-
repeatable read)
幻读
(Phantom
read)
READ_UNCOM
允许 允许 允许