??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲永久在线,精品一区欧美,免费在线国产http://www.aygfsteel.com/abin/category/53882.htmlzh-cnSun, 08 Sep 2013 19:49:36 GMTSun, 08 Sep 2013 19:49:36 GMT60事务相关知识点积?/title><link>http://www.aygfsteel.com/abin/archive/2013/09/08/403820.html</link><dc:creator>abing</dc:creator><author>abing</author><pubDate>Sun, 08 Sep 2013 09:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/abin/archive/2013/09/08/403820.html</guid><wfw:comment>http://www.aygfsteel.com/abin/comments/403820.html</wfw:comment><comments>http://www.aygfsteel.com/abin/archive/2013/09/08/403820.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/abin/comments/commentRss/403820.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/abin/services/trackbacks/403820.html</trackback:ping><description><![CDATA[<span style="color: #333333; font-family: arial, 宋体, sans-serif, 'Microsoft YaHei', tahoma; line-height: 24px; -webkit-text-decorations-in-effect: initial; background-color: #ffffff;"><h1><span style="font-size: 14pt;">数据库系l中事务的ACID原则是什么啊Q?<br /></span><span style="font-size: 14px; font-weight: normal; -webkit-text-decorations-in-effect: initial; background-color: #f1fedd;"><pre id="best-content-19403728" accuse="aContent" mb-10"="" style="margin-top: 0px; margin-bottom: 10px; padding: 0px; font-family: arial, 'courier new', courier, 宋体, monospace; white-space: pre-wrap; word-wrap: break-word;">事务的原子性、一致性、独立性及持久?br />事务的原子性是指一个事务要么全部执?要么不执?也就是说一个事务不可能只执行了一半就停止?比如你从取款机取?q个事务可以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.q两步必d时完?要么׃完成.<br />事务的一致性是指事务的q行q不改变数据库中数据的一致?例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改?<br />事务的独立性是指两个以上的事务不会出现交错执行的状?因ؓq样可能会导致数据不一?<br />事务的持久性是指事务运行成功以?ql的更新是永久的.不会无缘无故?a decor-none"="" target="_blank" rel="nofollow" data-word="0" style="color: #2d64b3; text-decoration: none; ">回滚</a>.<br /><br /><h3></h3></pre></span><div>spring事务传播属性和隔离U别</div><div style="color: #000000; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-weight: normal; line-height: 25.1875px;"><span style="font-size: large;">1 事务的传播属性(PropagationQ?nbsp;<br /><br />1) REQUIRED Q这个是默认的属?nbsp;<br />Support a current transaction, create a new one if none exists. <br />如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务?nbsp;<br />被设|成q个U别Ӟ会ؓ每一个被调用的方法创Z个逻辑事务域。如果前面的Ҏ已经创徏了事务,那么后面的方法支持当前的事务Q如果当前没有事务会重新建立事务?nbsp;<br />如图所C: <br /><br />2) MANDATORY <br />Support a current transaction, throw an exception if none exists.支持当前事务Q如果当前没有事务,抛出异常?nbsp;<br /><br />3) NEVER <br />Execute non-transactionally, throw an exception if a transaction exists. <br />以非事务方式执行Q如果当前存在事务,则抛出异常?nbsp;<br /><br />4) NOT_SUPPORTED <br />Execute non-transactionally, suspend the current transaction if one exists. <br />以非事务方式执行操作Q如果当前存在事务,把当前事务挂v?nbsp;<br /><br />5) REQUIRES_NEW <br />Create a new transaction, suspend the current transaction if one exists. <br />新徏事务Q如果当前存在事务,把当前事务挂赗?nbsp;<br />如图所C: <br /><br />6) SUPPORTS <br />Support a current transaction, execute non-transactionally if none exists. <br />支持当前事务Q如果当前没有事务,׃非事务方式执行?nbsp;<br /><br />7) NESTED <br />Execute within a nested transaction if a current transaction exists, behave like PROPAGATION_REQUIRED else. <br />支持当前事务Q新增Savepoint点,与当前事务同步提交或回滚?nbsp;<br />嵌套事务一个非帔R要的概念是内层事务依赖于外层事务。外层事务失败时Q会回滚内层事务所做的动作。而内层事务操作失败ƈ不会引v外层事务的回滚?nbsp;<br /><br />8) PROPAGATION_NESTED 与PROPAGATION_REQUIRES_NEW的区?nbsp;<br />它们非常 cM,都像一个嵌套事务,如果不存在一个活动的事务Q都会开启一个新的事务。用PROPAGATION_REQUIRES_NEWӞ内层事务与外层事务就像两个独立的事务一P一旦内层事务进行了提交后,外层事务不能对其q行回滚。两个事务互不媄响。两个事务不是一个真正的嵌套事务。同时它需要JTA 事务理器的支持?nbsp;<br />使用PROPAGATION_NESTEDӞ外层事务的回滚可以引起内层事务的回滚。而内层事务的异常q不会导致外层事务的回滚Q它是一个真正的嵌套事务?nbsp;<br /><br />2 事务的隔ȝ别(Isolation LevelQ?nbsp;<br /><br />1) 首先说明一下事务ƈ发引L三种情况 <br /><br />i. Dirty Reads 脏读 <br />一个事务正在对数据q行更新操作Q但是更新还未提交,另一个事务这时也来操作这l数据,q且d了前一个事务还未提交的数据Q而前一个事务如果操作失败进行了回滚Q后一个事务读取的是错误数据Q这样就造成了脏诅R?/span></div><div style="color: #000000; font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-weight: normal; line-height: 25.1875px;"><div><br /><span style="font-size: large;">ii. Non-Repeatable Reads 不可重复?nbsp;<br />一个事务多ơ读取同一数据Q在该事务还未结束时Q另一个事务也对该数据q行了操作,而且在第一个事务两ơ次d之间Q第二个事务Ҏ据进行了更新Q那么第一个事务前后两ơ读取到的数据是不同的,q样造成了不可重复读?/span></div><div><br /><span style="font-size: large;">iii. Phantom Reads qd?nbsp;<br />W一个数据正在查询符合某一条g的数据,q时Q另一个事务又插入了一条符合条件的数据Q第一个事务在W二ơ查询符合同一条g的数据时Q发现多了一条前一ơ查询时没有的数据,仿佛q觉一Pq就是像读?/span></div><div><br /><span style="font-size: large;">iv. 非重复度和像读的区?nbsp;<br />非重复读是指同一查询在同一事务中多ơ进行,׃其他提交事务所做的修改或删除,每次q回不同的结果集Q此时发生非重复诅R?A transaction rereads data it has previously read and finds that another committed transaction has modified or deleted the data. )</span></div><div><br /><span style="font-size: large;">qdL指同一查询在同一事务中多ơ进行,׃其他提交事务所做的插入操作Q每ơ返回不同的l果集,此时发生qd诅R?A transaction reexecutes a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additional rows that satisfy the condition. )</span></div><div><br /><span style="font-size: large;">表面上看Q区别就在于非重复读能看见其他事务提交的修改和删除,而像能看见其他事务提交的插入?nbsp;<br /><br />2) DEFAULT Q默认) <br />q是一个PlatfromTransactionManager默认的隔ȝ别,使用数据库默认的事务隔离U别.另外四个与JDBC的隔ȝ别相对应 <br /><br />3) READ_UNCOMMITTED Q读未提交) <br />q是事务最低的隔离U别Q它允许另外一个事务可以看到这个事务未提交的数据。这U隔ȝ别会产生脏读Q不可重复读和像读?nbsp;<br /><br />4) READ_COMMITTED Q读已提交) <br />保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这U事务隔ȝ别可以避免脏d玎ͼ但是可能会出C可重复读和像读?nbsp;<br /><br />5) REPEATABLE_READ Q可重复读) <br />q种事务隔离U别可以防止脏读Q不可重复读。但是可能出现像读。它除了保证一个事务不能读取另一个事务未提交的数据外Q还保证了不可重复读 <br /><br />6) SERIALIZABLEQ串行化Q?nbsp;<br />q是p最高代价但是最可靠的事务隔ȝ别。事务被处理为顺序执行。除了防止脏读,不可重复dQ还避免了像读?nbsp;<br /><br />7) 隔离U别解决事务q行引v的问?nbsp;<br />Dirty reads non-repeatable reads phantom reads <br />Serializable 不会 不会 不会 <br />REPEATABLE READ 不会 不会 ?nbsp;<br />READ COMMITTED 不会 ??nbsp;<br />Read Uncommitted ???/span></div></div><br /><br /><br /><br /><br /><span style="color: #000000"><span style="font-size: medium">事务的隔ȝ?</span><br /><br />注:Spring中事务的隔离U别是由数据库实现的 </span><br /><br /><strong>ISOLATION_DEFAULT </strong><br />    q是一个PlatfromTransactionManager默认的隔ȝ别,使用数据库默认的事务隔离U别.另外四个与JDBC的隔ȝ别相对应 <br />ISOLATION_READ_UNCOMMITTED q是事务最低的隔离U别Q它充许别外一个事务可以看到这个事务未提交的数据。这U隔ȝ别会产生脏读Q不可重复读和像读 <br /><br /><strong>ISOLATION_READ_COMMITTED</strong> <br />    保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。这U事务隔ȝ别可以避免脏d玎ͼ但是可能会出C可重复读和像读? <br /><br /><strong>ISOLATION_REPEATABLE_READ</strong> <br />    q种事务隔离U别可以防止脏读Q不可重复读。但是可能出现像读。它除了保证一个事务不能读取另一个事务未提交的数据外Q还保证了避免下面的情况产生(不可重复?? <br /><br /><strong>ISOLATION_SERIALIZABLE </strong><br />    q是p最高代价但是最可靠的事务隔ȝ别。事务被处理为顺序执行。除了防止脏读,不可重复dQ还避免了像读?<br /><br /><span style="color: red">脏读Q?/span> <br />    一个事务读取到另一个事务未提交的更新数据?<br /><span style="color: red">不可重复读:</span> <br />    在同一事务中,多次d同一数据q回的结果有所不同Q即后箋d可以d到另一事务已提交的更新数据Q相反,"可重复读"是指在同一事务中多ơ读取数据时Q能够保证所d的数据是一P卛_l读取不能读到另一事务已提交的数据? <br /><span style="color: red">q读Q?/span> <br />    一个事务读取到另一事务已提交的insert数据?nbsp;<br /></h1></span><img src ="http://www.aygfsteel.com/abin/aggbug/403820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/abin/" target="_blank">abing</a> 2013-09-08 17:00 <a href="http://www.aygfsteel.com/abin/archive/2013/09/08/403820.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ξ</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ĵ</a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">ƺ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">פ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϳ</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank">ո</a>| <a href="http://" target="_blank">̨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">差</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ߺ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">J</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ʊ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ϲ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>