﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-wqhtomcat-随笔分类-DATABASE</title><link>http://www.blogjava.net/wqhtomcat/category/15091.html</link><description>思 行 践</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:47:38 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:47:38 GMT</pubDate><ttl>60</ttl><item><title>事务（Transaction）的一些研究</title><link>http://www.blogjava.net/wqhtomcat/archive/2006/12/08/86401.html</link><dc:creator>wqhtomcat</dc:creator><author>wqhtomcat</author><pubDate>Fri, 08 Dec 2006 08:56:00 GMT</pubDate><guid>http://www.blogjava.net/wqhtomcat/archive/2006/12/08/86401.html</guid><wfw:comment>http://www.blogjava.net/wqhtomcat/comments/86401.html</wfw:comment><comments>http://www.blogjava.net/wqhtomcat/archive/2006/12/08/86401.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wqhtomcat/comments/commentRss/86401.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wqhtomcat/services/trackbacks/86401.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于事务（</span>
				<span lang="EN-US">Transation</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），大家肯定都不陌生了，因为作为一个</span>
				<span lang="EN-US">Web</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">程序开发人员来说，我们一般都会和数据库打交道，然后对数据库中的数据进行一系列的操作，那么为了保证我们对数据操作的合理性我们就不能不用到事务，虽然事务的实现不需要我们去操心，但是我们还是需要对事务进行一些了解，这样我们才能够明白我们日常所使用的东西，比如我们常用的开源框架</span>
				<span lang="EN-US">Spring</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">、</span>
				<span lang="EN-US">Hibernat</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等都会涉及到事务的问题，虽然事务有很多不同的实现，如符合</span>
				<span lang="EN-US">JTA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的事先，</span>
				<span lang="EN-US">JDBC</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的实现等等，但是其原理都是差不多的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对于事务的理解，这个我觉得有必要说一下，一般大家看到的理解都是很正式的、书面的，有时候让人觉得有些乱，并且细节的东西太多，在这里我就不说说课贴书了，呵呵，那我就把我自己的一点理解说一下：刚接触到事务的时候，感觉还有些模糊，慢慢的感觉清晰了一些，事务是为了什么而产生的呢？就是为了对付并发而造成的对数据的修改以及读取时的错误（或者说是一些不正常的现象），如果没有并发，没有资源的同时访问，估计也就用不到事务这个玩意了，呵呵，就像我们在单击上使用的单用户的软件一样，应该不会用到事务吧，一般又没有人跟你争，控制个啥子啊！我觉得事务就可以这么理解。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">而对于事务的分类，一般分为本地事务，即一个数据库的情况；再一个就是全局事务，也就是多个数据库的情况（其数据库事务的控制称为</span>
				<span lang="EN-US">XA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">），具体的情况可以看下面几个链接的介绍：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://blog.csdn.net/ladofwind/archive/2006/09/08/1194812.aspx">http://blog.csdn.net/ladofwind/archive/2006/09/08/1194812.aspx</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">关于数据库事务的基本概念</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://www.huihoo.com/middleware/trade_middleware.html">http://www.huihoo.com/middleware/trade_middleware.html</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">里面有介绍关于</span>
				<span lang="EN-US">XA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的内容</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://www.javaeye.com/topic/6302">http://www.javaeye.com/topic/6302</a>
				</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对跨数据库事务的一些讨论（总结一下就是一般采用两阶段提交的方式来解决跨数据库的事务问题）</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<a href="http://msdn2.microsoft.com/zh-cn/library/ckawh9ct(VS.80).aspx">http://msdn2.microsoft.com/zh-cn/library/ckawh9ct(VS.80).aspx</a> MS</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的关于单阶段和多阶段事务的提交的一些说明文档</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">并且还要支持</span>
				<span lang="EN-US">XA</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的数据库连接池，开源的如</span>
				<span lang="EN-US">XAPool </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">等。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">要说的就是这么多了，估计也基本够在</span>
				<span lang="EN-US">Web</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">开发中对其有一个了解</span>
				<span lang="EN-US">~ </span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">如果有更加深入的内容再进行讨论和补充。</span>
		</p>
<img src ="http://www.blogjava.net/wqhtomcat/aggbug/86401.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wqhtomcat/" target="_blank">wqhtomcat</a> 2006-12-08 16:56 <a href="http://www.blogjava.net/wqhtomcat/archive/2006/12/08/86401.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库设计备忘录</title><link>http://www.blogjava.net/wqhtomcat/archive/2006/09/12/69134.html</link><dc:creator>wqhtomcat</dc:creator><author>wqhtomcat</author><pubDate>Tue, 12 Sep 2006 05:23:00 GMT</pubDate><guid>http://www.blogjava.net/wqhtomcat/archive/2006/09/12/69134.html</guid><wfw:comment>http://www.blogjava.net/wqhtomcat/comments/69134.html</wfw:comment><comments>http://www.blogjava.net/wqhtomcat/archive/2006/09/12/69134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/wqhtomcat/comments/commentRss/69134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/wqhtomcat/services/trackbacks/69134.html</trackback:ping><description><![CDATA[数据库设计备忘录，没什么新鲜的，只是作为自己的一个备忘~<br />1、关系： 1：1，1：N，N：N<br />2、注意在使用多对多关系的时候，由于关系型数据库的限制，我们必须建立一个中间表，用来表明两者之间的关系<br />3、具体的原因是数据库中的表的主键应该是唯一的，但是如果在两个存在多对多关系的数据表之间表明两者之间的关系的话，就不能够保证数据主键的唯一性了，比如说：书籍和作者之间的关系，我们假设他们之间是多对多的关系，一本书籍可以有多个作者，一个作者可以写多本书籍，如果我们是用两个表来表明他们之间的关系，结构如下：<br /><br /><br />书籍表：<br /><br />主键    作者外键    名称 等其它属性<br /><br />作者表：<br /><br />主键   书籍外键  姓名等其它属性<br /><br />如果我们要向表中存入数据，那么就会如下所示：<br /><br />书籍表：<br /><br />1            1           应用Rails进行敏捷Web开发<br />1            2           应用Rails进行敏捷Web开发<br /><br />作者表：<br /><br />1            1            Dave Thomas<br />2            1            David Heinemeier Hansson<br /><br />这样就出现问题了，书籍表中出现了重复的主键，这个可是不行的哦<br /><br />如果加入一个中间连接表，那么问题就解决了，书籍表和作者表只管负责存储他们各自的信息，不需要存储他们的关系信息，关系信息让连接表进行存储就好了~，表的结构如下：<br />书籍表：<br /><br />主键     名称 等其它属性<br />1             应用Rails进行敏捷Web开发<br />2             Ant使用手册<br /><br />作者表：<br /><br />主键     姓名等其它属性<br />1                    Dave Thomas<br />2                David Heinemeier Hansson<br /><br />连接表：<br /><br />主键      书籍外键   作者外键<br />1                      1              1<br />2                      1              2<br /><br />这样，问题就解决了~<img src ="http://www.blogjava.net/wqhtomcat/aggbug/69134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/wqhtomcat/" target="_blank">wqhtomcat</a> 2006-09-12 13:23 <a href="http://www.blogjava.net/wqhtomcat/archive/2006/09/12/69134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>