在数据库中什么是事务和锁
数据库事务
数据库事务是指作为单个逻辑工作单元的一系列操作,要么完全执行,要么完全的不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足ACID属性,即为原子性,一致性,隔离性,持久性。事务是数据库运行的逻辑工作单元,由DBMS中事务管理子系统负责事务的处理。
原子性
事务必须是原子工作单元;对于其数据修改,要么全部执行,要么全都不执行。
一致性
事务完成时 必须使所有的数据都保持一致的状态
隔离性
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。
持久性
事务完成之后,它对于系统的影响是永久性的。该修改即使出现致命的系统故障也将一直保持。
sqlserver中按照事务的启动与执行方式,可以将事务分为三类
1.显示事务:也称为用户定义或用户指定的事务,即可以显式地定义启动和结束的事务。分布式事务属于显示事务
2.自动提交事务:这是sqlserver默认的一种事务模式,每条sql语句都被看成一个事务进行处理。如果一个语句成功地完成,则提交该语句。如果遇到错误,则回滚该语句。例如一个update的sql语句更新两个字段,你不会见过其中一个字段更新成功,而另外一个没更新成功的情况。
3.隐形事务:使用Set IMPLICIT_TRANSACTIONS ON将隐形事务模式打开,不用Begin Transaction开启事务,当一个事务结束,这个模式会自动启用下一个事务,只用Commit Transaction提交事务,Rollback Transaction 回滚事务即可
显示事务的应用
常用的语句有4个:
Begin Transaction(也可以写成begin tran):标记事务开始。
Commit Transaction(也可以写成commit tran):事务已经成功执行,数据已经处理妥当。
Rollback Transaction(也可以写成rollback tran):数据处理过程中出错,回滚到没有处理之前的数据状态,或回滚到事务内部的保存点。
Save Transaction(也可以写成save tran):事务内部设置的保存点,就是事务可以不全部回滚,只回滚到这里,保证事务内部不出错的前提下。
我比较喜欢括号中的写法
书写事务的基本格式:
带save tran事务基本书写格式:
save tran的作用就是可以自己设置你要回滚的地方
使用set xact_abort的事务
set xact_abort的作用是当set xact_abort设置为on时,如果Transact—SQL语句产生运行时错误,整个事务将终止并回滚。为OFF时,只回滚产生错误的Transact—SQL语句,而事务将继续进行处理。编译错误(如语法错误)不受不受 SET XACT_ABORT 的影响。对于大多数OLE DB提供程序(包括SQL Server),隐形或显式事务中的数据修改语句必须将xact_abort设置为ON。唯一不需要该选项的情况是提供程序支持嵌套事务时。set xact_abort的设置是在执行或运行时设置,而不是分析时设置。
|
|
数据库的锁
未完待续…