事务概念数据库
事务能够用不少不少不一样的方式去定义。事务是数据库操做执行的一个逻辑工做单元,是用户定义的一个数据库操做序列,这些操做要么全作要么全不作,是一个不可分割的工做单位。例如, 在关系数据库中, 一个事务能够是一条SQL语句、一组SQL语句或整个程序。事务和程序是两个概念。通常地讲, 一个程序中包含多个事务。事务的开始与结束能够由用户显式控制。若是用户没有显式地定义事务, 则由DBMS按缺省规定自动划分事务。并发
事务特性生命周期
在数据库系统中,一个事务是指由一系列数据库操做组成的一个完整的逻辑过程。例如银行转账,从原帐户扣除金额,以及向目标帐户添加金额,这两个数据库操做的总和,构成一个完整的逻辑过程,不可拆分。这个过程被称为一个事务,具备ACID特性。事务
- 原子性(Atomicity):一个事务(transaction)中的全部操做,要么所有完成,要么所有不完成,不会结束在中间某个环节。事务在执行过程当中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务历来没有执行过同样。
- 一致性(Consistency):在事务开始以前和事务结束之后,数据库的完整性没有被破坏。这表示写入的资料必须彻底符合全部的预设规则,这包含资料的精确度、串联性以及后续数据库能够自发性地完成预约的工做。
- 隔离性(Isolation):当两个或者多个事务并发访问(此处访问指查询和修改的操做)数据库的同一数据时所表现出的相互关系。事务隔离分为不一样级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
- 持久性(Durability):在事务完成之后,该事务对数据库所做的更改便持久地保存在数据库之中,而且是彻底的。
事务目的ci
事务在数据库系统中主要有两个目的:it
1.提供一个可靠的工做单元,可以从失败中恢复到正确的状态。若是发生系统错误,执行操做语句中断(所有中断或部分中断)或者是许多操做没有完成或不知道其状态下,依旧保持数据库正常运行。io
2.在程序访问数据库之间提供一个隔离。若是不提供这种隔离,程序可能返回不许确的结果。table
事务类型程序
- 自动提交的事务 -- 每个单独的语句都是一个事务
- 显示声明的事务 -- 明显的以BEGIN TRAN开始,而且以ROLLBACK TRAN或者是COMMIT TRAN结尾的语句。
- 隐含事务 -- SQL Server会在当前事务被提交或回滚后自动启动一个新的事务,这个新事务直到用户执行COMMIT或ROLLBACK为止, 这时系统又会启动一个新事务。这样就造成了一个连续的事务链。
经常使用的事务操做数据
- BEGIN TRANSACTION – 开始事务,事务开始保存点
- ROLLBACK TRANSACTION – 回滚事务,因为出现错误,回滚数据到事务开始以前
- COMMIT TRANSACTION – 提交事务,保存数据到数据库中
完整的事务生命周期
1.事务开始
2.执行数据库操做语句(一个或多个)
3.若是没有错误发生,提交事务而且事务结束
4.若是出现了错误,回滚到事务开始以前而且事务结束