`
js_hum
  • 浏览: 17409 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

事务的原理

 
阅读更多

  事务 (Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transactionend transaction 语句(或函数调用)来界定。事务由事务开始(begin transaction )和事务结束(end transaction )之间执行的全体操作组成。

  例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。

      事务的理解,先要明白它的四种属性(特性):即ACID

  原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

  一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。   

  隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。   

  持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

  明白这四种属性,就差不多明白事务是什么回事了,也知道什么时候使用了。

 

事务并发处理会产生的问题 

丢失更新 

当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题、 
每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。 

脏读 
当第二个事务选择其它事务正在更新的行时,会发生未确认的相关性问题。 
第二个事务正在读取的数据还没有确认并且可能由更新此行的事务所更改。 

不可重复读 

当第二个事务多次访问同一行而且每次读取不同的数据时,会发生不一致的分析问题。 
不一致的分析与未确认的相关性类似,因为其它事务也是正在更改第二个事务正在读取的数据。 
然而,在不一致的分析中,第二个事务读取的数据是由已进行了更改的事务提交的。而且,不一致的分析涉及多次(两次或更多)读取同一行,而且每次信息都由其它事务更改;因而该行被非重复读取。 

幻像读 

当对某行执行插入或删除操作,而该行属于某个事务正在读取的行的范围时,会发生幻像读问题。 
事务第一次读的行范围显示出其中一行已不复存在于第二次读或后续读中,因为该行已被其它事务删除。同样,由于其它事务的插入操作,事务的第二次或后续读显示有一行已不存在于原始读中。 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics