??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩中文一区二区三区,一级欧美视频,亚洲一区二区在线观http://www.aygfsteel.com/magicdoom/category/7903.html<h1>南哥</h1>zh-cnSun, 21 Oct 2012 16:51:57 GMTSun, 21 Oct 2012 16:51:57 GMT60事务学习W记一Q概念)http://www.aygfsteel.com/magicdoom/archive/2006/03/16/35550.html南哥南哥Thu, 16 Mar 2006 02:34:00 GMThttp://www.aygfsteel.com/magicdoom/archive/2006/03/16/35550.htmlhttp://www.aygfsteel.com/magicdoom/comments/35550.htmlhttp://www.aygfsteel.com/magicdoom/archive/2006/03/16/35550.html#Feedback2http://www.aygfsteel.com/magicdoom/comments/commentRss/35550.htmlhttp://www.aygfsteel.com/magicdoom/services/trackbacks/35550.html 一Q什么是事务

     事务是应用程序中一pd严密的操作,所有操作必L功完成,否则在每个操作中所作的所有更攚w会被撤消。也是事务h原子性,一个事务中的一pd的操作要么全部成功,要么一个都不做?/span>

   事务的结束有两种Q当事务中的所以步骤全部成功执行时Q事务提交。如果其中一个步骤失败,发生回滚操作,撤消撤消之前C务开始时的所以操作?/span>

二.事务?/span> ACID

事务h四个特征Q原子性( Atomicity Q、一致性( Consistency Q、隔L( Isolation Q和持箋性( Durability Q。这四个Ҏ简UCؓ ACID Ҏ?/span>

1 、原子?/span>

    事务是数据库的逻辑工作单位Q事务中包含的各操作要么都做Q要么都不做

2 、一致?/span>

      事务执行的结果必L使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时Q就说数据库处于一致性状态。如果数据库pȝq行中发生故障,有些事务未完成pq中断,q些未完成事务对数据库所做的修改有一部分已写入物理数据库Q这时数据库处于一U不正确的状态,或者说是不一致的状态?/span>  

3 、隔L?/span>

    一个事务的执行不能其它事务q扰。即一个事务内部的操作及用的数据对其它ƈ发事务是隔离的,q发执行的各个事务之间不能互相干扰?/span>

4 、持l?/span>

   也称怹性,指一个事务一旦提交,它对数据库中的数据的改变应该是怹性的。接下来的其它操作或故障不应该对其执行结果有M影响?/span>

 

 

二.事务的属?/span>

一个事务的属性控制了事务的用范围?/span> EJB ?/span> Spring 以及.net下的事务属性都很类似的Q?/span> 事务属性有如下几种Q?/span>

Required:
如果在一个事务中调用Q就把该Ҏ加到此事务中?/span>
如果q没有启动事务,启动一个新事务

RequiredNew:
不管当前有没有事务,都会启动一个新事务Q如果当前有事务Q会被挂L到方法结束?/span>

NotSupported:
不能在事务中执行此方法。如果有事务Q将会被挂v直到Ҏl束?/span>

Supports:
如果当前有事务,此方法会加到当前事务Q如果没有,容器也不会启动新事务?/span>

Mandatory:
必须在事务中调用此方法,否则抛出异常?br />
Never:
必须不在事务中调用此ҎQ否则抛出异常?/span>

 

三.事务的回?/span>

CMT 在以下两中情况下Q事务将回滚。第一Q如果生一个系l异常,容器自动回滚该事务。第二,通过调用 EJBContext 接口 SetRollbackOnly ҎQ?/span> Bean Ҏ通知容器回滚该事务。如?/span> Bean 抛出一个应用异常,事务不会自动回滚,但可以调?/span> SetRollbackOnly 回滚?/span>

 

四.事务时

对于 EJB 中的容器理事务Q事务超旉隔是通过讄 default.properties 文g?/span> ransaction.timeout 属性的值来定的,该文件在 J2EE SDK 安装目录?/span> config 子目录下。如下例事务超旉隔设|ؓ 5 U钟Q?/span> transaction.timeout=5 Q这P当事务在 5 U钟内还没有完成Q容器将回滚该事务?/span>

J2EE SDK 安装后,时间隔的缺省gؓ 0 Q表CZ计算时Q无Z务执行多长时_除非异常出错回滚Q一直等待事务完成?/span>

只有使用容器理事务的企?/span> Bean 才会受到 transaction.timeout 属性值的影响?/span> Bean 理?/span> JTA 事务使用 UserTransaction 接口?/span> setTransactionTimeout Ҏ来设|事务超旉隔?/span>

 

五.隔离U别

 事务不仅保证事务界限内的数据库操作全部完成(或回滚)同时q隔L据库更新语句。隔ȝ别描q被修改的数据对其他事物的可见度。隔ȝ别的控制会跟具体?/span> DBMS 厂商不同而不同?/span>

      隔离U别与ƈ发性是互ؓ矛盾的:隔离E度高Q数据库的ƈ发性越差;隔离E度低Q数据库的ƈ发性越好?/span>

通过一些现象,可以反映出隔ȝ别的效果。这些现象有Q?/span>

l         更新丢失Q?/span> lost update Q:当系l允怸个事务同时更新同一数据是,发生更新丢失?/span>

l         脏读Q?/span> dirty read Q:当一个事务读取另一个事务尚未提交的修改Ӟ产生脏读?/span>

l         非重复读Q?/span> nonrepeatable read Q:事务多次d同一行中的数?/strong>却得C同数值时。例如:事务1d了一行数据,而事?改变或删除了那些行ƈ提交了修攏V如果事?再次d了那一行,那么Q事?得C不同的数|被更新或删除Q?br />

l         qd读( phantom read Q:一行数据满x索规则,却在开始没有被看到。例如:事务1d了一pd满搜烦规则的行Q而事?插入或删除了一个满事?搜烦规则的行。如果事?再次执行查询语句Q就会得C同的一pd行?/span>

 

SQL-99 标准定义了下列隔ȝ别:

l         未提交读Q?/span> read uncommitted Q(隔离事务的最低别,只能保证不读取物理上损坏的数据)

l         已提交读Q?/span> read committed Q(数据库引?/span>   的默认别)当一个事务运行在q个隔离U别Ӟ 一?/span> SELECT 查询只能看到查询开始之前提交的数据Q而永q?/span> 无法看到未提交的数据Q或者是在查询执行时其他q行的事务提交做的改变?/span>

l         可重复读Q?/span> repeatable read Q,不会脏读和非重复读,可能发生qd?/span>

l         可串行化Q?/span> serializable Q(隔离事务的最高别,事务之间完全隔离Q?br />

                      

ANSI/ISO SQL 隔离U别

隔离U别

脏读Q?span lang="EN-US">DirtyReadQ?/span>

不可重复的读Q?span lang="EN-US">Non-Repeatable ReadQ?/span>

  qd dQ?span lang="EN-US">Phantom ReadQ?/span>

未提交读 Q?span lang="EN-US">Read uncommittedQ?

可能

可能

可能

已提交读 Q?span lang="EN-US">Read committedQ?

不可?

可能

可能

可重复读Q?span lang="EN-US">Repeatable readQ?

不可?

不可?

可能

可串行化Q?span lang="EN-US">Serializable Q?

不可?

不可?

不可?




南哥 2006-03-16 10:34 发表评论
]]>
վ֩ģ壺 ƺ| ƽɽ| ʯɽ| ī| ʯȪ| ͤ| Ҧ| | | | | | | ԭ| ̨ǰ| | | ƽ| | | | ɼ| | | ϵ| | | | ݳ| ɽ| ߺ| Ϫ| ƽ| غ| ¡| | ˷| ƽ| | ÷| |