??xml version="1.0" encoding="utf-8" standalone="yes"?>日韩国产一区二区三区,欧美私人网站,久久成人福利http://www.aygfsteel.com/kangdy/archive/2011/11/30/365223.htmlAK47AK47Wed, 30 Nov 2011 09:24:00 GMThttp://www.aygfsteel.com/kangdy/archive/2011/11/30/365223.htmlhttp://www.aygfsteel.com/kangdy/comments/365223.htmlhttp://www.aygfsteel.com/kangdy/archive/2011/11/30/365223.html#Feedback0http://www.aygfsteel.com/kangdy/comments/commentRss/365223.htmlhttp://www.aygfsteel.com/kangdy/services/trackbacks/365223.html文章地址 Q?nbsp;http://www.zxbc.cn/html/20080527/51189.html
转蝲 
内连接:(x)把两个表中数据对应的数据查出?nbsp;
外连接:(x)以某个表为基把对应数据查出来Q全q接是以多个表ؓ(f)基础Q?nbsp;
student?nbsp;
no name 
1     a 
2     b 
3     c 
4     d 
grade?nbsp;
no grade 
1     90 
2     98 
3     95 
内连?inner joinQ查找条件中对应的数据,no4没有数据不列出来Q?nbsp;
语法Qselect * from student inner join grade on student.no = grade.no 
l果 
student.no name grade.no grade 
1             a             1         90 
2             b             2         98 
3             c             3         95 
左连接(左表中所有数据,双中对应数据)(j) 
语法Qselect * from student left join grade on student.no = grade.no 
l果Q?nbsp;
student.no name grade.no grade 
1                 a         1         90 
2                 b         2         98 
3                 c         3         95 
4                 d     
双接(双中所有数据,左表中对应数据)(j) 
语法Qselect * from student right join grade on student.no = grade.no 
l果Q?nbsp;
student.no name grade.no grade 
1                 a         1         90 
2                 b         2         98 
3                 c         3         95 
全连?nbsp;
语法Qselect * from student full join grade on student.no = grade.no 
l果Q?nbsp;
no name grade 
1     a     90 
2     b     98 
3     c     95 
4     d 
1     a     90 
2     b     98 
3     c     95 
注:(x)access 中不能直接用full join Q需要用union all 左q接和右q接合ƈ后才可以

交叉q接
两个表所有行l合Q连接后的行Cؓ(f)两个表行数的乘积Q笛卡尔U)(j)
语法Q借用上面的例子应该是
select * from student cross join grade

行数应该?2?Q?br />
no name grade 
1     a     90 
2     b     98 
3     c     95 
4     d  
1     a     90 
2     b     98 
3     c     95 
4     d 
1     a     90 
2     b     98 
3     c     95 
4     d 


AK47 2011-11-30 17:24 发表评论
]]>
(转脓(chung))数据库三范式l典实例解析http://www.aygfsteel.com/kangdy/archive/2011/02/21/344760.htmlAK47AK47Mon, 21 Feb 2011 06:45:00 GMThttp://www.aygfsteel.com/kangdy/archive/2011/02/21/344760.htmlhttp://www.aygfsteel.com/kangdy/comments/344760.htmlhttp://www.aygfsteel.com/kangdy/archive/2011/02/21/344760.html#Feedback0http://www.aygfsteel.com/kangdy/comments/commentRss/344760.htmlhttp://www.aygfsteel.com/kangdy/services/trackbacks/344760.html数据库的设计范式是数据库设计所需要满的规范Q满些规范的数据库是z的、结构明晰的Q同Ӟ不会(x)发生插入QinsertQ、删除(deleteQ和更新QupdateQ操作异常。反之则是ؕ七八p,不仅l数据库的编Eh员制造麻?ch),而且面目可憎Q可能存储了(jin)大量不需要的冗余信息?br />      设计范式是不是很难懂呢?非也Q大学教材上l我们一堆数学公式我们当然看不懂Q也C住。所以我们很多h根本不按照范式来设计数据库?br />      实质上,设计范式用很形象、很z的话语p说清楚,道明白。本文将对范式进行通俗地说明,q以W者曾l设计的一个简单论坛的数据库ؓ(f)例来讲解怎样这些范式应用于实际工程?br />

范式说明
     W一范式Q?NFQ:(x)数据库表中的字段都是单一属性的Q不可再分。这个单一属性由基本cd构成Q包括整型、实数、字W型、逻辑型、日期型{?br />      例如Q如下的数据库表是符合第一范式Q?

字段1 字段2 字段3 字段4
? ? ? ?
 而这L(fng)数据库表是不W合W一范式的:(x)
字段1 字段2 字段3 字段4
? ? 字段3.1 字段3.2 ?

 

     很显?dng)在当前的M关系数据库管理系l(DBMSQ中Q傻瓜也不可能做ZW合W一范式的数据库Q因些DBMS不允怽把数据库表的一列再分成二列或多列。因此,你想在现有的DBMS中设计出不符合第一范式的数据库都是不可能的?br />      W二范式Q?NFQ:(x)数据库表中不存在非关键字D对M候选关键字D늚部分函数依赖Q部分函C赖指的是存在l合关键字中的某些字D决定非关键字段的情况)(j)Q也x有非关键字段都完全依赖于L一l候选关键字?br />      假定选课关系表ؓ(f)SelectCourse(学号, 姓名, q龄, 评名称, 成W, 学分)Q关键字为组合关键字(学号, 评名称)Q因为存在如下决定关p:(x)
     (学号, 评名称) → (姓名, q龄, 成W, 学分)
     q个数据库表不满第二范式,因ؓ(f)存在如下军_关系Q?br />      (评名称) → (学分)
     (学号) → (姓名, q龄)
卛_在组合关键字中的字段军_非关键字的情c(din)?br />      ׃不符?NFQ这个选课关系表会(x)存在如下问题Q?br />      (1) 数据冗余Q?br />      同一门课E由n个学生选修Q?学分"重复n-1ơ;同一个学生选修?jin)m门课E,姓名和年龄就重复?jin)m-1ơ?br />      (2) 更新异常Q?br />      若调整了(jin)某门评的学分,数据表中所有行?学分"值都要更斎ͼ否则?x)出现同一门课E学分不同的情况?br />      (3) 插入异常Q?br />      假设要开设一门新的课E,暂时q没有h选修。这P׃q没?学号"关键字,评名称和学分也无法记录入数据库?br />      (4) 删除异常Q?br />      假设一批学生已l完成课E的选修Q这些选修记录应该从数据库表中删除。但是,与此同时Q课E名U和学分信息也被删除?jin)。很昄Q这也会(x)D插入异常?

     把选课关系表SelectCourse改ؓ(f)如下三个表:(x)
     学生QStudent(学号, 姓名, q龄)Q?br />      评QCourse(评名称, 学分)Q?br />      选课关系QSelectCourse(学号, 评名称, 成W)?br />      q样的数据库表是W合W二范式的,消除?jin)数据冗余、更新异常、插入异常和删除异常?br />      另外Q所有单关键字的数据库表都符合第二范式,因ؓ(f)不可能存在组合关键字?br />      W三范式Q?NFQ:(x)在第二范式的基础上,数据表中如果不存在非关键字段对Q一候选关键字D늚传递函C赖则W合W三范式。所谓传递函C赖,指的是如果存?A → B → C"的决定关p,则C(j)传递函C赖于A。因此,满W三范式的数据库表应该不存在如下依赖关系Q?br />      关键字段 → 非关键字Dx → 非关键字Dy
     假定学生关系表ؓ(f)Student(学号, 姓名, q龄, 所在学? 学院地点, 学院?sh)?Q关键字为单一关键?学号"Q因为存在如下决定关p:(x)
     (学号) → (姓名, q龄, 所在学? 学院地点, 学院?sh)?
q个数据库是W合2NF的,但是不符?NFQ因为存在如下决定关p:(x)
     (学号) → (所在学? → (学院地点, 学院?sh)?
卛_在非关键字段"学院地点"?学院?sh)?对关键字D?学号"的传递函C赖?br />      它也?x)存在数据冗余、更新异常、插入异常和删除异常的情况,读者可自行分析得知?br />      把学生关p表分ؓ(f)如下两个表:(x)
     学生Q?学号, 姓名, q龄, 所在学?Q?br />      学院Q?学院, 地点, ?sh)??br /> q样的数据库表是W合W三范式的,消除?jin)数据冗余、更新异常、插入异常和删除异常?br />      鲍依?U得范式QBCNFQ:(x)在第三范式的基础上,数据库表中如果不存在M字段对Q一候选关键字D늚传递函C赖则W合W三范式?br />      假设仓库理关系表ؓ(f)StorehouseManage(仓库ID, 存储物品ID, 理员I(y)D, 数量)Q且有一个管理员只在一个仓库工作;一个仓库可以存储多U物品。这个数据库表中存在如下军_关系Q?br />      (仓库ID, 存储物品ID) →(理员I(y)D, 数量)
     (理员I(y)D, 存储物品ID) → (仓库ID, 数量)
     所以,(仓库ID, 存储物品ID)?理员I(y)D, 存储物品ID)都是StorehouseManage的候选关键字Q表中的唯一非关键字Dؓ(f)数量Q它是符合第三范式的。但是,׃存在如下军_关系Q?br />      (仓库ID) → (理员I(y)D)
     (理员I(y)D) → (仓库ID)
卛_在关键字D决定关键字D늚情况Q所以其不符?BCNF范式。它?x)出现如下异常情况?x)
     (1) 删除异常Q?br />      当仓库被清空后,所?存储物品ID"?数量"信息被删除的同时Q?仓库ID"?理员I(y)D"信息也被删除?jin)?br />      (2) 插入异常Q?br />      当仓库没有存储Q何物品时Q无法给仓库分配理员?br />      (3) 更新异常Q?br />      如果仓库换了(jin)理员,则表中所有行的管理员I(y)D都要修改?br />      把仓库管理关p表分解Z个关p表Q?br />      仓库理QStorehouseManage(仓库ID, 理员I(y)D)Q?br />      仓库QStorehouse(仓库ID, 存储物品ID, 数量)?br />      q样的数据库表是W合BCNF范式的,消除?jin)删除异常、插入异常和更新异常?br />

原帖地址Q?http://www.cublog.cn/u/23975/showart.php?id=391210



AK47 2011-02-21 14:45 发表评论
]]>
数据库事务简?/title><link>http://www.aygfsteel.com/kangdy/archive/2009/11/11/301981.html</link><dc:creator>AK47</dc:creator><author>AK47</author><pubDate>Wed, 11 Nov 2009 09:23:00 GMT</pubDate><guid>http://www.aygfsteel.com/kangdy/archive/2009/11/11/301981.html</guid><wfw:comment>http://www.aygfsteel.com/kangdy/comments/301981.html</wfw:comment><comments>http://www.aygfsteel.com/kangdy/archive/2009/11/11/301981.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kangdy/comments/commentRss/301981.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kangdy/services/trackbacks/301981.html</trackback:ping><description><![CDATA[<p>事务是一pd的操?q些操作完成一Q?只要q些操作里有一个操作没有成?事务操作失?发生回滚事g.x消前面的操作,q样可以保证数据的一致?而且可以把操作暂时放在缓存里,{所有操作都成功有提交数据库,q样保证Ҏ(gu)的操作都是有效操? <br /> 如果没有Ҏ(gu)声明Q事务就是指数据库事务简单的讲就是对数据库表的添加、删除、修改和查询操作?br /> 从编E的角度来说事务可由E序员来讄,Q何时开启,何时提交Q何时回滚)(j)如果没有讄则按数据库默认自动划分事务。而事务最l在数据库上执行.所以要求数据库支持事务?/p> <p>事务h四个特征Q原子性( Atomicity Q、一致性( Consistency Q、隔L( Isolation Q和持箋性( Durability Q。这四个Ҏ(gu)简UCؓ(f) ACID Ҏ(gu)?br /> 1 、原子?br />     事务是数据库的逻辑工作单位Q事务中包含的各操作要么都做Q要么都不做<br /> 2 、一致?nbsp; <br />     事务执行的结果必L使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时Q就说数据库处于一致性状态。如果数据库pȝ q行中发生故障,有些事务未完成pq中断,q些未完成事务对数据库所做的修改有一部分已写入物理数据库Q这时数据库处于一U不正确的状态,或者说?不一致的状态?nbsp; <br /> 3 、隔L?br />     一个事务的执行不能其它事务q扰。即一个事务内部的操作?qing)用的数据对其它ƈ发事务是隔离的,q发执行的各个事务之间不能互相干扰?br /> 4 、持l?br />    也称怹性,指一个事务一旦提交,它对数据库中的数据的改变应该是怹性的。接下来的其它操作或故障不应该对其执行结果有M影响?br />    <br /> 数据库系l是允许多个用户׃n数据库资源,其是多个用户可以同时存取相同数据。(多用户同时对一个表操作也就是ƈ发)(j)<br /> 我们主观上虽不想q么做,可是q种情况是存在的Q没有原因。而ƈ发会(x)破坏事务ACIDҎ(gu)?Q隔L,一致性)(j)?/p> <p>q发?x)带来下列问题?x)<br />  脏读Q一个事务读取了(jin)未提交的事务<br />  不可重复读:(x)同一个事务中多次d同一个数据返回的l果不同<br />  q读Q一个事务读取到?jin)另一个事务已提交的insert数据?br />  <br /> 如果应用E序使用完全隔离的事务,那么同时执行多个事务的效果将与串行执行(一个接一个的序执行Q完全等效。ؓ(f)解决事务之间的ƈ发带来的个问题,必须在事务之间徏立隔dp(使用隔离U别Q?/p> <p>事务的隔ȝ别:(x)是对事务ƈ发控制的{QANSI/ISO SQL其分ؓ(f)串行化(SERIALIZABLEQ、可重复读(REPEATABLE READQ、读已提交(READ COMMITEDQ、读未提交(READ UNCOMMITEDQ四个等U?br />     1 SerializableQ最严格的别,事务串行执行Q资源消耗最大;<br />     2 REPEATABLE READQ读取数据的事务允许其他事务l箋讉K该行数据Q但是未提交的写事务会(x)止其他事务讉K该行。避免了(jin)“脏读?#8221;?#8220;不可重复d”的情况,但是带来?jin)更多的性能损失?br />     3 READ COMMITTED:大多C数据库的默认事务等U,保证?jin)一个事务不?x)读到另一个ƈ行事务已修改但未提交的数据,避免?#8220;脏读?#8221;。该U别适用于大多数pȝ?br />     4 Read UncommittedQ最低的事务隔离U别,保证?jin)读取过E中不会(x)d到非法数据?br /> <br /> <table width="500" border="0" cellpadding="2" cellspacing="2"> <tbody> <tr> <td>     隔离U别</td> <td>    脏读</td> <td>       不可重复?/td> <td>    q读 </td> </tr> <tr> <td>     Serializable</td> <td>    不会(x)</td> <td>            不会(x)</td> <td>    不会(x)</td> </tr> <tr> <td>     REPEATABLE READ</td> <td>    不会(x)</td> <td>            不会(x)</td> <td>      ?/td> </tr> <tr> <td>     READ COMMITTED</td> <td>    不会(x)</td> <td>              ?/td> <td>      ?/td> </tr> <tr> <td>     Read Uncommitted</td> <td>      ?/td> <td>              ?/td> <td>      ?/td> </tr> </tbody> </table>    <br /> 数据库采用锁机制来实C务的隔离性?/p> <p> ׃n锁:(x)׃n锁用于读取数据操作,它允许其他事务同时读取某锁定的资源,但不允许其他事务更新它?br />  排他锁:(x)排它锁用于修Ҏ(gu)据的场合。它锁定的资源,其他事务不能d也不能修攏V?br />  更新锁:(x)更新锁在更新操作的初始化阶段用来锁定可能要被修改的资源,从而避免用共享锁造成的死锁现?/p> <p>常见的ƈ发控刉</p> <p>http://hahalzb.blogbus.com/logs/19150842.html   ?j)晴怡然</p> <fieldset><legend>引用Q?/legend> <p><br /> 乐观?/p> <p>处理q发更新的一U方式是使用乐观锁(optimistic lockingQ。乐观锁的工作原理是让应用程序检查它卛_更新的数据是否已被另一个事务修改(自该数据上次d以来Q。实C观锁的一U常见做法是在每个表里添加一个版本字D,每次应用E序更新数据表记录时增加这个版本字Dc(din)每个UPDATE语句中的WHERE子句?x)根据上ơ读取的值来判断q个版本h否改变。通过查看PreparedStatement.executeUpdate()q回的记录数Q应用程序可以判断UPDATE语句是否成功。如果这条记录已被另一个事务更新或删除Q应用程序可以回滚这个事务,q新开始?br /> 在直接执行SQL语句的应用程序中Q乐观锁机制的实现非常容易。不q,使用诸如JDO和Hibernate的持久层构架Ӟ实现更ؓ(f)Ҏ(gu)Q因为它们已乐观锁作ؓ(f)配置选项提供。一旦启用该配置选项Q持久层框架?x)自动生成SQL UPDATE语句Q执行版本检查。第12章将分析乐观锁的使用时机?qing)其~点Qƈ向你展示怎样在iBATIS、JDO和Hibernate中用乐观锁?br /> 乐观锁的名称源自如下假定情况Q即q发更新的几率极,此外应用E序q不Lq发更新Q而是(g)ƈ发更斎ͼq从q发更新中恢复过来。另一U方式是使用(zhn)观锁(pessimistic lockingQ,它假定ƈ发更新将?x)发生,因此必须预先L?/p> <p>(zhn)观?/p> <p>不同于乐观锁的另一U方式是使用(zhn)观锁。当d某些记录Ӟ事务先锁住这些记录,q样可以防止其他事务讉Kq些数据记录。具体细节要视数据库而定Q不q糟p的是,q所有数据库都支持?zhn)观锁。如果数据库支持(zhn)观锁,在直接执行SQL语句的应用程序中Q实现?zhn)观锁非?br /> Ҏ(gu)。然而,正如你所预料的,在JDO或Hibernate应用E序中用?zhn)观锁更?f)Ҏ(gu)。JDO以配|选项的方式提供?zhn)观锁Q而Hibernate则提供一个简单实用的APIQ来锁定对象。同P在第12章,你将学习(fn)何时使用(zhn)观锁,分析其缺点,q看看怎样在iBATIS、JDO和Hibernate中用?zhn)观锁?br /> </p> </fieldset> <img src ="http://www.aygfsteel.com/kangdy/aggbug/301981.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kangdy/" target="_blank">AK47</a> 2009-11-11 17:23 <a href="http://www.aygfsteel.com/kangdy/archive/2009/11/11/301981.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">ˮ</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>