??xml version="1.0" encoding="utf-8" standalone="yes"?>国产麻豆视频一区二区,日本电影一区二区在线观看,五月天激情在线http://www.aygfsteel.com/masen/category/22361.htmlzh-cnSat, 27 Feb 2016 05:00:16 GMTSat, 27 Feb 2016 05:00:16 GMT60DBCP配置(?http://www.aygfsteel.com/masen/articles/429456.htmlMasenMasenSat, 27 Feb 2016 03:06:00 GMThttp://www.aygfsteel.com/masen/articles/429456.htmlhttp://www.aygfsteel.com/masen/comments/429456.htmlhttp://www.aygfsteel.com/masen/articles/429456.html#Feedback0http://www.aygfsteel.com/masen/comments/commentRss/429456.htmlhttp://www.aygfsteel.com/masen/services/trackbacks/429456.html


DBCPq接池介l?/h1>

-----------------------------

目前 DBCP 有两个版本分别是 1.3 ?1.4?/p>

DBCP 1.3 版本需要运行于 JDK 1.4-1.5 Q支?JDBC 3?/p>

DBCP 1.4 版本需要运行于 JDK 1.6 Q支?JDBC 4?/p>

1.3?.4Z同一套源代码Q含有所有的bug修复和新Ҏ(gu)。因此在选择DBCP版本的时候,要看你用的是什么JDK版本?/p>

DBCP1.2版本性能一般,比c3p0差挺多。DBCP1.4?.3Q配合(依赖Qcommons pool 1.6的jar?各方面功能、性能推进到新的高峰。相?.2版本提高不少。超?或相?了c3p0.使用DBCP1.4?.3 +  commons pool 1.6

 

Tomcat7 中保留DBCPq接池,以兼容已有应用。ƈ提供了新的Tomcat JDBC pool作ؓ(f)DBCP的可选替代。新出的Tomcat JDBC poolQ据说比DBCP 1.4要好Q未接触Q也不在本文讨论范围内?/p>

 

DBCPq接池配|参数讲?/h1>

-----------------------------

一、Apache官方DBCP文l出的配|示例:(x)

可参见:(x)http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html

<Context>

  <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"

               maxActive="100" maxIdle="30" maxWait="10000"

               username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"

               url="jdbc:mysql://localhost:3306/javatest"/>

</Context>

 

tomcat JDBCq接池配|示例,自动查连接的可用性,dbcp定时连接,dbcp自动重连的配|?/strong>

Xml代码  收藏代码
  1. <Resource  
  2. name="jdbc/TestDB"  JNDI数据源的nameQ查找时用:(x)java:comp/env/jdbc/TestDB  
  3. type="javax.sql.DataSource"  
  4. factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"  
  5. driverClassName="com.mysql.jdbc.Driver" JDBC驱动c?nbsp; 
  6. url="jdbc:mysql://localhost:3306/test?  
  7. characterEncoding=UTF-8&amp;autoReconnectForPools=true&amp;rewriteBatchedStatements=true&amp;useCursorFetch=true&amp;defaultFetchSize=20" 数据库URL地址    
  8. username="xxx" 讉K数据库用户名  
  9. password="xxx" 讉K数据库的密码  
  10.    
  11. maxWait="3000" 从池中取q接的最大等待时_(d)单位ms.  
  12. initialSize="10"  初始化连?nbsp; 
  13. maxIdle="60"   最大空闲连?nbsp; 
  14. minIdle="10"   最空闲连?nbsp; 
  15. maxActive="80" 最大活动连?nbsp; 
  16.    
  17. validationQuery = "SELECT 1"  验证使用的SQL语句  
  18. testWhileIdle = "true"      指明q接是否被空闲连接回收器(如果?q行?如果失?则连接将被从池中去除.  
  19. testOnBorrow = "false"   借出q接时不要测试,否则很媄响性能  
  20. timeBetweenEvictionRunsMillis = "30000"  ?0U运行一ơ空闲连接回收器  
  21. minEvictableIdleTimeMillis = "1800000"  池中的连接空?0分钟后被回收  
  22. numTestsPerEvictionRun="10" 在每ơ空闲连接回收器U程(如果?q行时检查的q接数量  
  23.       
  24. removeAbandoned="true"  q接泄漏回收参数Q当可用q接数少?个时才执?nbsp; 
  25. removeAbandonedTimeout="180"  q接泄漏回收参数Q?80U,泄露的连接可以被删除的超时?nbsp; 
  26. />  

 

 

DBCPq接池的自我?/h1>

-----------------------------

默认配置的DBCPq接池,是不Ҏ(gu)中的q接做测试的Q有时连接已断开了,但DBCPq接池不知道Q还以ؓ(f)q接是好的呢?/p>

应用从池中取L(fng)q接讉K数据库一定会(x)报错。这也是好多Z喜欢DBCP的原因?/p>

 

问题例一Q?/p>

MySQL8时问题QMysql服务器默认连接的“wait_timeout”?时Q也是说一个connectionI闲过8个小ӞMysql自动断开?connection?/p>

但是DBCPq接池ƈ不知道连接已l断开了,如果E序正y使用到这个已l断开的连接,E序׃(x)报错误?/p>

 

问题例二Q?/p>

    以前q用Sybase数据库,׃某种原因Q数据库M后重启、或断网后恢复?/p>

    {了U?0分钟后,DBCPq接池中的连接还都是不能使用的(断开的)Q访问数据应用一直报错,最后只能重启Tomcat问题才解??/p>

 

解决Ҏ(gu)Q?/p>

    Ҏ(gu)1、定时对q接做测试,试p|关闭连接?/p>

    Ҏ(gu)2、控制连接的I闲旉辑ֈN分钟Q就关闭q接Q(然后可再新徏q接Q?/p>

    以上两个Ҏ(gu)使用L一个就可以解决以述两类问题。如果只使用Ҏ(gu)2Q徏?N <= 5分钟。连接断开后最?分钟后可恢复?/p>

    也可混合使用两个Ҏ(gu)Q徏?N = 30分钟?/p>

    

    下面是DBCPq接池,同时使用了以上两个方案的配置配置

    validationQuery = "SELECT 1"  验证q接是否可用Q用的SQL语句

    testWhileIdle = "true"      指明q接是否被空闲连接回收器(如果?q行?如果失?则连接将被从池中去除.

    testOnBorrow = "false"   借出q接时不要测试,否则很媄响性能

    timeBetweenEvictionRunsMillis = "30000"  ?0U运行一ơ空闲连接回收器

    minEvictableIdleTimeMillis = "1800000"  池中的连接空?0分钟后被回收,默认值就?0分钟?/p>

    numTestsPerEvictionRun="3" 在每ơ空闲连接回收器U程(如果?q行时检查的q接数量Q默认值就?.

    

    解释Q?/p>

    配置timeBetweenEvictionRunsMillis = "30000"后,?0U运行一ơ空闲连接回收器Q独立线E)。ƈ每次?个连接,如果q接I闲旉过30分钟销毁。销毁连接后Q连接数量就了Q如果小于minIdle数量Q就新徏q接Q维护数量不于minIdleQ过行了新老更ѝ?/p>

    testWhileIdle = "true" 表示?0U,取出3条连接,使用validationQuery = "SELECT 1" 中的SQLq行试 Q测试不成功销毁连接。销毁连接后Q连接数量就了Q如果小于minIdle数量Q就新徏q接?/p>

    testOnBorrow = "false" 一定要配置Q因为它的默认值是true。false表示每次从连接池中取接时Q不需要执行validationQuery = "SELECT 1" 中的SQLq行试。若配置为true,Ҏ(gu)能有非常大的媄响,性能?x)下?-10倍。所在一定要配置为false.

    ?0U,取出numTestsPerEvictionRun条连接(本例?Q也是默认|Q发?SELECT 1" SQL语句q行试 Q测试过的连接不是“被?#8221;了,q算是空闲的。连接空?0分钟后会(x)被销毁?/p>

    

 

DBCPq接池配|参数注意事? 

-----------------------------

maxIdlegmaxActive值应配置的接q?/p>

因ؓ(f)Q当q接数超qmaxIdle值后Q刚刚用完的连接(刚刚I闲下来Q会(x)立即被销毁。而不是我惌的空闲MU后再销毁v一个缓冲作用。这一点DBCP做的可能与你惛_的不一栗?/p>

若maxIdle与maxActive相差较大Q在高负载的pȝ中会(x)D频繁的创建、销毁连接,q接数在maxIdle与maxActive间快速频JL动,q不是我惌的?/p>

高负载系l的maxIdle值可以设|ؓ(f)与maxActive相同或设|ؓ(f)-1(-1表示不限?Q让q接数量在minIdle与maxIdle间缓冲慢速L动?/p>

 

timeBetweenEvictionRunsMillis讄?/p>

initialSize="5"Q会(x)在tomcat一启动Ӟ创徏5条连接,效果很理惟?/p>

但同时我们还配置了minIdle="10"Q也是_(d)最要保持10条连接,那现在只?条连接,哪什么时候再创徏的5条连接呢Q?/p>

1、等业务压力上来了, DBCP׃(x)创徏新的q接?/p>

2、配|timeBetweenEvictionRunsMillis=“旉”,DBCP?x)启用独立的工作U程定时查,补上的5条连接。销毁多余的q接也是同理?/p>

 

q接销毁的逻辑

------------------------------

DBCP的连接数?x)? 0 - minIdle - maxIdle - maxActive  之间变化。变化的逻辑描述如下Q?/p>

 

默认未配|initialSize(默认值是0)和timeBetweenEvictionRunsMillis参数Ӟ刚启动tomcatӞq接数是0。当应用有一个ƈ发访问数据库时DBCP创徏一个连接?/p>

目前q接数量q未辑ֈminIdleQ但DBCP也不自动创徏新连接已使数量达到minIdle数量Q没有一个独立的工作U程来检查和创徏Q?/p>

随着应用q发讉K数据库的增多Q连接数也增多,但都与minIdle值无养I很快minIdle被超,minIdleg点用都没有?/p>

直到q接的数量达到maxIdle|q时的连接都是只增不减的?再l发展,q接数再增多q超qmaxIdleӞ使用完的q接Q刚刚空闲下来的Q会(x)立即关闭QMq接的数量稳定在maxIdle但不?x)超qmaxIdle?/p>

但活动连接(在用中的连接)可能数量上瞬间超qmaxIdleQ但永远不会(x)过maxActive?/p>

q时如果应用业务压力了Q访问数据库的ƈ发少了,q接C不会(x)减少Q没有一个独立的U程来检查和销毁)Q将保持在maxIdle的数量?/p>

 

默认未配|initialSize(默认值是0)Q但配置了timeBetweenEvictionRunsMillis=“30000”Q?0U)参数Ӟ刚启动tomcatӞq接数是0。马上应用有一个ƈ发访问数据库时DBCP创徏一个连接?/p>

目前q接数量q未辑ֈminIdleQ每30UDBCP的工作线E检查连接数是否于minIdle数量Q若于创建新q接直到辑ֈminIdle数量?/p>

随着应用q发讉K数据库的增多Q连接数也增多,直到辑ֈmaxIdle倹{这期间?0UDBCP的工作线E检查连接是否空闲了30分钟Q若是就销毁。但此时是业务的高峰期,是不?x)有长?0分钟的空闲连接的Q工作线E查了也是白查,但它在工作。到q里q接数量一直是呈现增长的趋ѝ?/p>

当连接数再增多超qmaxIdleӞ使用完的q接(刚刚I闲下来)?x)立卛_闭,Mq接的数量稳定在maxIdle。停止了增长的趋ѝ但zdq接Q在使用中的q接Q可能数量上瞬间过maxIdleQ但永远不会(x)过maxActive?/p>

q时如果应用业务压力了Q访问数据库的ƈ发少了,?0UDBCP的工作线E检查连?默认每次??是否I闲辑ֈ30分钟(q是默认?Q若q接I闲辑ֈ30分钟Q就销毁连接。这时连接数减少了,呈下降趋势,从maxIdle走向minIdle。当于minIdle值时Q则DBCP创徏新连接已使数量稳定在minIdleQƈq行着新老更ѝ?/p>

 

配置initialSize=“10”Ӟtomcat一启动创?0条连接。其它同上?/p>

 

minIdle要与timeBetweenEvictionRunsMillis配合使用才有?单独使用minIdle不会(x)起作用?/p>

 

 

Tomcat中配|DBCPq接?/h1>

-----------------------------

Tomcat自带DBCP的包Q是$CATALINA_HOME/lib/tomcat-dbcp.jar?/p>

tomcat-dbcp.jar含有commons pool、commons DBCP两个包的内容。但只含有与q接池有关的cR?/p>

数据源配|在context.xml文g中, 要在tomcat的lib目录中放jdbc 驱动?/p>

数据源配|在server.xml的host中,不需要在tomcat的lib目录中放jdbc 驱动包,只用工E中的jdbc驱动?/p>

 

 

JNDI配置:更改tomcat的server.xml或context.xml

 

    全局的数据源Q?/p>

    如果需要配|全局?ResourceQ则在server.xml的GlobalNamingResources节点里加入ResourceQ再在Context节点里加入ResourceLink的配|?/p>

    全局的resource只是Z重用Q方便所有该tomcat下的web工程的数据源理Q但如果你的tomcat不会(x)同时加蝲多个web工程Q也是说一个tomcat只加载一个web工程Ӟ是没有必要配|全局的resource的?/p>

 

每个web工程一个数据源Q?/p>

?CATALINA_HOME/conf/context.xml的根节点Context里加入Resource配置。这U配|方法,你在context.xml配置了一个数据源Q但Tomcat中有同时q行着5个工E,那了坏事儿了,q个在Tomcat启动时数据源被创Z5份,每个工程1份数据源。连接数?x)是你配|的参数?倍?/p>

只有在你的Tomcat只加载一个web工程?才可以直接以context.xml配置数据源?/p>

 

<Resource name="jdbc/testDB"       //指定的jndi名称Q会(x)用于spring数据源bean的配|和ResourceLink的配|?/p>

               type="javax.sql.DataSource"   //数据源类型,使用标准的javax.sql.DataSource

               driverClassName="com.mysql.jdbc.Driver"    //JDBC驱动?nbsp;

               url="jdbc:mysql://localhost:3306/test" //数据库URL地址             

               username="test"     //数据库用户名

               password="test"   //数据库密?/p>

               maxIdle="40"   //最大的I闲q接?/p>

               maxWait="4000" //当池的数据库q接已经被占用的时候,最大等待时?/p>

               maxActive="40" //q接池当中最大的数据库连?/p>

               removeAbandoned="true" 

               removeAbandonedTimeout="180"

               logAbandoned="true" //被丢弃的数据库连接是否做记录Q以便跟t?/p>

               factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" />

 

      q里的factory指的是该Resource 配置使用的是哪个数据源配|类Q这里用的是tomcat自带的标准数据源Resource配置c,q个cM可以自己写,实现javax.naming.spi.ObjectFactory 接口卛_。某些地方用的commons-dbcp.jar中的org.apache.commons.dbcp.BasicDataSourceFactoryQ如果用这个就需把commons-dbcp.jar?qing)其依赖的jar包,都放在tomcat的lib下,光放在工E的WEB-INF/lib下是不够的?/p>

 

     ResourceLink 的配|有多种Q?/p>

 

     1)tomcat安装目录下的conf/context.xmlQ把全局的resource直接公开l该tomcat下的所有web工程Q在Context节点中加入:(x)

<ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/>   

不徏议在此文件中Q不使用<ResourceLink/>Q而?lt;Resource/>直接配置数据源,原因上面已说明了?  

 

     2)tomcat安装目录下的conf/server.xmlQ该Ҏ(gu)可以指定把哪些sourcel定到哪个web工程下?/p>

<!-- 新增Q第一行ؓ(f)加蝲的工E配|,W二行是该工E需要的ResourceLink配置 -->

<context docBase="/web/webapps/phoenix" path="" reloadable="false"> 

      <ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/>

</context>

也可在此文g中,不?lt;ResourceLink/>Q而?lt;Resource/>直接配置数据源?/p>

 

     3)安装目录下的conf/localhost/下徏立一个xml文gQ文件名?lt;yourAppName>.xml。比如工E名为testQ则该xml名ؓ(f)test.xml?/p>

<?xml version="1.0" encoding="UTF-8"?>

<Context>   

    <ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/>       

</context>

也可在此文g中,不?lt;ResourceLink/>Q而?lt;Resource/>直接配置数据源?/p>

 

     4)tomcat安装目录下的\webapps\test\META-INF\context.xml的Context节点中增?

<ResourceLink global="jdbc/testMDB" name="jdbc/testMDB" type="javax.sql.DataSource"/>

也可在此文g中,不?lt;ResourceLink/>Q而?lt;Resource/>直接配置数据源?/p>

 

 

本文内容都在tomcat6.0上运行测试过Q还下蝲了commons DBCP的源码,加入了跟t日志,用于验证本文的理论?/p>

 

q接池排名(U个人看法)

-----------------------------

Tomcat JDBC pool

DBCP 1.4

c3p0   速度不错

BoneCP 速度不错Q但?x)启用很多附加线E做回收、关闭工作?/p>

Proxool 在高q发时出现异?/p>

DBCP 1.2

DBPool 最差,垫底?/p>

参考文《Javaq接池评估报告?/p>

 



Masen 2016-02-27 11:06 发表评论
]]>
mysql防止重复插入记录Ҏ(gu)ȝ Q{Q?/title><link>http://www.aygfsteel.com/masen/articles/424345.html</link><dc:creator>Masen</dc:creator><author>Masen</author><pubDate>Sun, 12 Apr 2015 11:34:00 GMT</pubDate><guid>http://www.aygfsteel.com/masen/articles/424345.html</guid><wfw:comment>http://www.aygfsteel.com/masen/comments/424345.html</wfw:comment><comments>http://www.aygfsteel.com/masen/articles/424345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/masen/comments/commentRss/424345.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/masen/services/trackbacks/424345.html</trackback:ping><description><![CDATA[<div style="list-style: none; margin: 0px; color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px;">防止mysql重复插入记录的方法有很多U,常用的是ignore,Replace,ON DUPLICATE KEY UPDATE,当然我们也可以在php中加以判断了?/div><div style="list-style: none; margin: 0px; padding-top: 20px; padding-bottom: 20px; height: auto; overflow: hidden; color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px;"><span style="font-size: 14.3999996185303px;">Ҏ(gu)一Q用ignore关键?/span></div><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">如果是用主键primary或者唯一索引unique区分了记录的唯一?避免重复插入记录可以使用Q?/p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">代码如下:</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy5733" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;"> INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test9@163.com', '99999', '9999'); <br /></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"> <br />q样当有重复记录׃(x)忽略,执行后返回数?</p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />q有个应用就是复制表,避免重复记录Q?nbsp;<br />代码如下:</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy8362" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;"> INSERT IGNORE INTO `table_1` (`name`) SELECT `name` FROM `table_2`; <br /></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"> <br />Ҏ(gu)二:(x)使用Replace</p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />语法格式Q?/p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">代码如下:</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy3733" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;"><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; word-wrap: break-word;">REPLACE INTO `table_name`(`col_name`, ...) VALUES (...);<br />REPLACE INTO `table_name` (`col_name`, ...) SELECT ...;<br />REPLACE INTO `table_name` SET `col_name`='value',</p></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">...法说明Q?/p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">REPLACE的运行与INSERT很相?但是如果旧记录与新记录有相同的|则在新记录被插入之前Q旧记录被删除,卻I(x)</p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />试把新行插入到表中</p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">当因为对于主键或唯一关键字出现重复关键字错误而造成插入p|Ӟ(x) <br />从表中删除含有重复关键字值的冲突?nbsp;<br />再次试把新行插入到表中 <br />旧记录与新记录有相同的值的判断标准是Q?br />表有一个PRIMARY KEY或UNIQUE索引Q否则,使用一个REPLACE语句没有意义。该语句?x)与INSERT相同Q因为没有烦引被用于定是否新行复制了其它的行?nbsp;<br />q回|(x)<br />REPLACE语句?x)返回一个数Q来指示受媄响的行的数目。该数是被删除和被插入的行数的和<br />受媄响的行数可以Ҏ(gu)地确定是否REPLACE只添加了一行,或者是否REPLACE也替换了其它行:(x)查该数是否ؓ(f)1Q添加)或更大(替换Q?nbsp;<br />CZ:<br /># eg:(phone字段为唯一索引)</p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">代码如下:</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy3906" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;"><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; word-wrap: break-word;">REPLACE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('test569', '99999', '123');</p></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">另外,?SQL Server 中可以这样处理:(x)</p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />代码如下:</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy6648" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;"><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; word-wrap: break-word;">if not exists (<a target="_blank" style="font-size: 15px; color: #2d64b3;">select</a> phone from t where phone= '1')   insert into t(phone, update_time) values('1', getdate()) else    update t set update_time = getdate() where phone= '1'</p></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><strong>Ҏ(gu)三:(x)ON DUPLICATE KEY UPDATE</strong></p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />?#8205;上所写,你也可以在INSERT INTO…..后面加上 ON DUPLICATE KEY UPDATEҎ(gu)来实现。如果?zhn)指定了ON DUPLICATE KEY UPDATEQƈ且插入行后会(x)D在一个UNIQUE索引或PRIMARY KEY中出现重复|则执行旧行UPDATE?nbsp;<br />例如Q如果列a被定义ؓ(f)UNIQUEQƈ且包含?Q则以下两个语句h相同的效果:(x)</p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />代码如下:</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy1862" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;"> <br />INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE `c`=`c`+1; <br />UPDATE `table` SET `c`=`c`+1 WHERE `a`=1;</td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">如果行作为新记录被插入,则受影响行的gؓ(f)1Q如果原有的记录被更斎ͼ则受影响行的gؓ(f)2?/p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />注释Q如果列b也是唯一列,则INSERT与此UPDATE语句相当Q?nbsp;<br />代码如下:</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy6940" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;">UPDATE `table` SET `c`=`c`+1 WHERE `a`=1 OR `b`=2 LIMIT 1;</td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">如果a=1 OR b=2与多个行向匹配,则只有一个行被更新。通常Q?zhn)应该量避免对带有多个唯一关键字的表用ON DUPLICATE KEY子句?/p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />(zhn)可以在UPDATE子句中用VALUES(col_name)函数从INSERT…UPDATE语句的INSERT部分引用列倹{换句话_(d)如果没有发生重复关键字冲H,则UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的倹{本函数特别适用于多行插入。VALUES()函数只在INSERT…UPDATE语句中有意义Q其它时候会(x)q回NULL?/p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />代码如下:</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy1005" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;">INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`);</td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">本语句与以下两个语句作用相同Q?/p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />代码如下:</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy5394" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;">INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3) ON DUPLICATE KEY UPDATE `c`=3; <br />INSERT INTO `table` (`a`, `b`, `c`) VALUES (4, 5, 6) ON DUPLICATE KEY UPDATE c=9;</td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">注释Q当(zhn)用ON DUPLICATE KEY UPDATEӞDELAYED选项被忽略?/p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />CZQ?/p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">q个例子是我在实际项目中用到的:(x)是将一个表的数据导入到另外一个表中,数据的重复性就得考虑(如下)Q唯一索引为:(x)emailQ?/p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />代码如下:</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy7574" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;"><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; word-wrap: break-word;">INSERT INTO `table_name1` (`title`, `first_name`, `last_name`, `email`, `phone`, `user_id`, `role_id`, `status`, `campaign_id`) <br />    SELECT '', '', '', `table_name2`.`email`, `table_name2`.`phone`, NULL, NULL, 'pending', 29 FROM `table_name2` <br />    WHERE `table_name2`.`status` = 1 <br />ON DUPLICATE KEY UPDATE `table_name1`.`status`='pending'</p></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">再脓(chung)一个例子:(x)</p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br />代码如下:</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy6609" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;"><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; word-wrap: break-word;"> INSERT INTO `class` SELECT * FROM `class1` ON DUPLICATE KEY UPDATE `class`.`course`=`class1`.`course`</p></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">其它关键QDELAYED  做ؓ(f)快速插入,q不是很兛_失效性,提高插入性能?nbsp;<br />IGNORE  只关注主键对应记录是不存在,无则dQ有则忽略?/p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">php防止重复插入记录实例</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy9542" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;"><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; word-wrap: break-word;"><br /><?php <br />$link=mysql_connect(‘localhost’,’root’,’1234’); //得到MySQL<a target="_blank" style="font-size: 15px; color: #2d64b3;">数据?/a>q接 <br />$username=$_GET["name"]; //得到从客L(fng)表单传过来的数据 <br />$q="select * from usertable where user_name='$username'"; <br />mysql_query("SET NAMES gb2312"); //避免出现中文q <br />$rs = mysql_query($q, $link); //查询<a target="_blank" style="font-size: 15px; color: #2d64b3;">数据?/a> <br />$num_rows = mysql_num_rows($rs); //得到查询l果的总行?nbsp;<br />if($num_rows==0) <br />// 烈火? liehuo.net Ƣ迎复制,拒绝恶意采集 liehuoQnet <br />{ <br />$exec="insert into student (user_name) values ($username)"; <br />mysql_query("SET NAMES gb2312"); <br />mysql_query($exec, $link); //若没有此用户则将数据插入到数据库(注册用户) <br />echo "用户注册成功Q?; <br />} <br />else <br />{ <br />echo "该用户名已存在,请重新选择用户名!"; <br />} <br />?></p></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;"><br /><strong>附一些删除重复记录的Ҏ(gu)</strong></p><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">查询?qing)删除重复记录的SQL语句 <br />1、查找表中多余的重复记录Q重复记录是Ҏ(gu)单个字段QpeopleIdQ来判断</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy3864" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;">select * from people <br />where peopleId in (select peopleId from people <a target="_blank" style="font-size: 15px; color: #2d64b3;">group by</a> peopleId having count(peopleId) > 1) <br /></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">2、删除表中多余的重复记录Q重复记录是Ҏ(gu)单个字段QpeopleIdQ来判断Q只留有rowid最的记录</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy6248" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;">delete from people <br />where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1) <br />and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1) <br /></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">3、查找表中多余的重复记录Q多个字D)</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy9394" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;">select * from vitae a <br />where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) <br /></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">4、删除表中多余的重复记录Q多个字D)Q只留有rowid最的记录</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy5576" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;">delete from vitae a <br />where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) <br />and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1) <br /></td></tr></tbody></table><p style="list-style: none; margin: 0px; padding: 8px 0px; font-size: 14px; line-height: 26px; word-wrap: break-word; color: #444444; font-family: Simsun;">5、查找表中多余的重复记录Q多个字D)Q不包含rowid最的记录</p><table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="color: #444444; font-family: Simsun; font-size: 15.3333330154419px; line-height: 26px; background: #ffbb77;"><tbody><tr><td width="464" height="27" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px;"> 代码如下</td><td width="109" align="center" bgcolor="#FFE7CE" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 0px; cursor: pointer;">复制代码</td></tr><tr><td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" id="copy4284" style="font-size: 12px; color: #000000; list-style: none; margin: 0px; padding: 10px;">select * from vitae a <br />where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) <br />and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)<br /><br /></td></tr></tbody></table><img src ="http://www.aygfsteel.com/masen/aggbug/424345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/masen/" target="_blank">Masen</a> 2015-04-12 19:34 <a href="http://www.aygfsteel.com/masen/articles/424345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql 分表 分区 Q{Q?/title><link>http://www.aygfsteel.com/masen/articles/424314.html</link><dc:creator>Masen</dc:creator><author>Masen</author><pubDate>Sat, 11 Apr 2015 11:00:00 GMT</pubDate><guid>http://www.aygfsteel.com/masen/articles/424314.html</guid><wfw:comment>http://www.aygfsteel.com/masen/comments/424314.html</wfw:comment><comments>http://www.aygfsteel.com/masen/articles/424314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/masen/comments/commentRss/424314.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/masen/services/trackbacks/424314.html</trackback:ping><description><![CDATA[     摘要: Z么要分表和分区?日常开发中我们l常?x)遇到大表的情况Q所谓的大表是指存储了百万乃至千万U条记录的表。这L(fng)表过于庞大,D数据库在查询和插入的时候耗时太长Q性能低下Q如果涉?qing)联合查询的情况Q性能?x)更加糟p。分表和表分区的目的是减少数据库的负担Q提高数据库的效率,通常Ҏ(gu)讲就是提高表的增删改查效率。什么是分表Q分表是一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以UCؓ(f)子表Q?..  <a href='http://www.aygfsteel.com/masen/articles/424314.html'>阅读全文</a><img src ="http://www.aygfsteel.com/masen/aggbug/424314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/masen/" target="_blank">Masen</a> 2015-04-11 19:00 <a href="http://www.aygfsteel.com/masen/articles/424314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Oracle 常用命o(h)Q{Q?/title><link>http://www.aygfsteel.com/masen/articles/327769.html</link><dc:creator>Masen</dc:creator><author>Masen</author><pubDate>Mon, 02 Aug 2010 09:25:00 GMT</pubDate><guid>http://www.aygfsteel.com/masen/articles/327769.html</guid><wfw:comment>http://www.aygfsteel.com/masen/comments/327769.html</wfw:comment><comments>http://www.aygfsteel.com/masen/articles/327769.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/masen/comments/commentRss/327769.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/masen/services/trackbacks/327769.html</trackback:ping><description><![CDATA[<p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; ">W一?日志理<br /> 1.forcing log switches   q开x?br /> sql> alter system switch logfile;<br /> 2.forcing checkpoints    ?br /> sql> alter system checkpoint;<br /> 3.adding online redo log groups    加入联机重做日志l?br /> sql> alter database add logfile [group 4]<br /> sql> ('/disk3/log4a.rdo','/disk4/log4b.rdo') size 1m;<br /> 4.adding online redo log members    加入联机重做日志成员<br /> sql> alter database add logfile member<br /> sql> '/disk3/log1b.rdo' to group 1,<br /> sql> '/disk4/log2b.rdo' to group 2;<br /> 5.changes the name of the online redo logfile     更改名称的联机重做日?br /> sql> alter database rename file 'c:/oracle/oradata/oradb/redo01.log'<br /> sql> to 'c:/oracle/oradata/redo01.log';<br /> 6.drop online redo log groups    落在UK做日志组<br /> sql> alter database drop logfile group 3;<br /> 7.drop online redo log members       落在UK做日志成?br /> sql> alter database drop logfile member 'c:/oracle/oradata/redo01.log';<br /> 8.clearing online redo log files l算在线重做日志文g<br /> sql> alter database clear [unarchived] logfile 'c:/oracle/log2a.rdo';<br /> 9.using logminer analyzing redo logfiles  使用logminer分析重做日志<br /> a. in the init.ora specify utl_file_dir = ' '<br /> b. sql> execute dbms_logmnr_d.build('oradb.ora','c:\oracle\oradb\log');<br /> c. sql> execute dbms_logmnr_add_logfile('c:\oracle\oradata\oradb\redo01.log',<br /> sql> dbms_logmnr.new);<br /> d. sql> execute dbms_logmnr.add_logfile('c:\oracle\oradata\oradb\redo02.log',<br /> sql> dbms_logmnr.addfile);<br /> e. sql> execute dbms_logmnr.start_logmnr(dictfilename=>'c:\oracle\oradb\log\oradb.ora');<br /> f. sql> select * from v$logmnr_contents(v$logmnr_dictionary,v$logmnr_parameters<br /> sql> v$logmnr_logs);<br /> g. sql> execute dbms_logmnr.end_logmnr;</p> <p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; "><br /> W二?表空间管?br /> 1.create tablespaces   创徏表空?br /> sql> create tablespace tablespace_name datafile 'c:\oracle\oradata\file1.dbf' size 100m,<br /> sql> 'c:\oracle\oradata\file2.dbf' size 100m minimum extent 550k [logging/nologging]<br /> sql> default storage (initial 500k next 500k maxextents 500 pctinccease 0)<br /> sql> [online/offline] [permanent/temporary] [extent_management_clause]<br /> 2.locally managed tablespace    本地理表空?br /> sql> create tablespace user_data datafile 'c:\oracle\oradata\user_data01.dbf'<br /> sql> size 500m extent management local uniform size 10m;<br /> 3.temporary tablespace    临时表空?br /> sql> create temporary tablespace temp tempfile 'c:\oracle\oradata\temp01.dbf'<br /> sql> size 500m extent management local uniform size 10m;<br /> 4.change the storage setting    改变存储讄<br /> sql> alter tablespace app_data minimum extent 2m;<br /> sql> alter tablespace app_data default storage(initial 2m next 2m maxextents 999);<br /> 5.taking tablespace offline or online    同时表空间离U或在线<br /> sql> alter tablespace app_data offline;<br /> sql> alter tablespace app_data online;<br /> 6.read_only tablespace    只读表空?br /> sql> alter tablespace app_data read only|write;<br /> 7.droping tablespace    删除表空?br /> sql> drop tablespace app_data including contents;<br /> 8.enableing automatic extension of data files   enableing自动廉数据案<br /> sql> alter tablespace app_data add datafile 'c:\oracle\oradata\app_data01.dbf' size 200m<br /> sql> autoextend on next 10m maxsize 500m;<br /> 9.change the size fo data files manually  寸变化的数据档案手?br /> sql> alter database datafile 'c:\oracle\oradata\app_data.dbf' resize 200m;<br /> 10.Moving data files: alter tablespace  Ud数据案:改变表空?br /> sql> alter tablespace app_data rename datafile 'c:\oracle\oradata\app_data.dbf'<br /> sql> to 'c:\oracle\app_data.dbf';<br /> 11.moving data files:alter database   Ud数据档案:改变数据?br /> sql> alter database rename file 'c:\oracle\oradata\app_data.dbf'<br /> sql> to 'c:\oracle\app_data.dbf';</p> <p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; "> </p> <p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; ">W三??br /> 1.create a table   新徏?br /> sql> create table table_name (column datatype,column datatype]....)<br /> sql> tablespace tablespace_name [pctfree integer] [pctused integer]<br /> sql> [initrans integer] [maxtrans integer]<br /> sql> storage(initial 200k next 200k pctincrease 0 maxextents 50)<br /> sql> [logging|nologging] [cache|nocache]<br /> 2.copy an existing table   复制一个现有的?br /> sql> create table table_name [logging|nologging] as subquery<br /> 3.create temporary table   创徏临时?br /> sql> create global temporary table xay_temp as select * from xay;<br /> on commit preserve rows/on commit delete rows<br /> 4.pctfree = (average row size - initial row size) *100 /average row size<br /> pctused = 100-pctfree- (average row size*100/available data space)<br /> 5.change storage and block utilization parameter  改变存储和利用块参数<br /> sql> alter table table_name pctfree=30 pctused=50 storage(next 500k<br /> sql> minextents 2 maxextents 100);<br /> 6.manually allocating extents<br /> sql> alter table table_name allocate extent(size 500k datafile 'c:/oracle/data.dbf');<br /> 7.move tablespace   Ud表空?br /> sql> alter table employee move tablespace users;<br /> 8.deallocate of unused space  deallocate的闲|空?br /> sql> alter table table_name deallocate unused [keep integer]<br /> 9.truncate a table   截断?br /> sql> truncate table table_name;<br /> 10.drop a table  删除?br /> sql> drop table table_name [cascade constraints];<br /> 11.drop a column  删除?br /> sql> alter table table_name drop column comments cascade constraints checkpoint 1000;<br /> alter table table_name drop columns continue;<br /> 12.mark a column as unused<br /> sql> alter table table_name set unused column comments cascade constraints;<br /> alter table table_name drop unused columns checkpoint 1000;<br /> alter table orders drop columns continue checkpoint 1000<br /> data_dictionary : dba_unused_col_tabs</p> <p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; "> </p> <p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; ">  W四?索引<br /> 1.creating function-based indexes  建立Z功能的烦?br /> sql> create index summit.item_quantity on summit.item(quantity-quantity_shipped);<br /> 2.create a B-tree index    创造一个B?wi)烦?br /> sql> create [unique] index index_name on table_name(column,.. asc/desc) tablespace<br /> sql> tablespace_name [pctfree integer] [initrans integer] [maxtrans integer]<br /> sql> [logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0<br /> sql> maxextents 50);<br /> 3.pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows<br /> 4.creating reverse key indexes   创造逆{关键指标<br /> sql> create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k<br /> sql> next 200k pctincrease 0 maxextents 50) tablespace indx;<br /> 5.create bitmap index   创徏位图索引<br /> sql> create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k<br /> sql> pctincrease 0 maxextents 50) tablespace indx;<br /> 6.change storage parameter of index   改变存储参数指标<br /> sql> alter index xay_id storage (next 400k maxextents 100);<br /> 7.allocating index space    分配索引I间<br /> sql> alter index xay_id allocate extent(size 200k datafile 'c:/oracle/index.dbf');<br /> 8.alter index xay_id deallocate unused;    改变指数xay_id deallocate?/p> <p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; "> </p> <p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; "><br /> W五?U束<br /> 1.define constraints as immediate or deferred     界定制约x或g?br /> sql> alter session set constraint[s] = immediate/deferred/default;<br /> set constraint[s] constraint_name/all immediate/deferred;<br /> 2. sql> drop table table_name cascade constraints<br /> sql> drop tablespace tablespace_name including contents cascade constraints<br /> 3. define constraints while create a table    界定限制,同时创徏一个表<br /> sql> create table xay(id number(7) constraint xay_id primary key deferrable<br /> sql> using index storage(initial 100k next 100k) tablespace indx);<br /> primary key/unique/references table(column)/check<br /> 4.enable constraints    使制U?br /> sql> alter table xay enable novalidate constraint xay_id;<br /> 5.enable constraints     使制U?br /> sql> alter table xay enable validate constraint xay_id;</p> <p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; "> </p> <p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; "><br /> W六?LOAD数据<br /> 1.loading data using direct_load insert<br /> sql> insert /*+append */ into emp nologging<br /> sql> select * from emp_old;<br /> 2.parallel direct-load insert<br /> sql> alter session enable parallel dml;<br /> sql> insert /*+parallel(emp,2) */ into emp nologging<br /> sql> select * from emp_old;<br /> 3.using sql*loader<br /> sql> sqlldr scott/tiger \<br /> sql> control = ulcase6.ctl \<br /> sql> log = ulcase6.log direct=true</p> <p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; "> </p> <p style="display: block; font-size: 14px; line-height: 26px; color: #2b516c; text-decoration: none; "><br /> W七?数据整理<br /> 1.using expoty<br /> $exp scott/tiger tables(dept,emp) file=c:\emp.dmp log=exp.log compress=n direct=y<br /> 2.using import<br /> $imp scott/tiger tables(dept,emp) file=emp.dmp log=imp.log ignore=y<br /> 3.transporting a tablespace<br /> sql>alter tablespace sales_ts read only;<br /> $exp sys/.. file=xay.dmp transport_tablespace=y tablespace=sales_ts<br /> triggers=n constraints=n<br /> $copy datafile<br /> $imp sys/.. file=xay.dmp transport_tablespace=y datafiles=(/disk1/sles01.dbf,/disk2<br /> /sles02.dbf)<br /> sql> alter tablespace sales_ts read write;<br /> 4.checking transport set<br /> sql> DBMS_tts.transport_set_check(ts_list =>'sales_ts' ..,incl_constraints=>true);<br /> 在表transport_set_violations 中查?br /> sql> dbms_tts.isselfcontained 为true 是, 表示自包?br /> W八? 密码安全与资源管?br /> 1.controlling account lock and password<br /> sql> alter user juncky identified by oracle account unlock;<br /> 2.user_provided password function<br /> sql> function_name(userid in varchar2(30),password in varchar2(30),<br /> old_password in varchar2(30)) return boolean<br /> 3.create a profile : password setting<br /> sql> create profile grace_5 limit failed_login_attempts 3<br /> sql> password_lock_time unlimited password_life_time 30<br /> sql>password_reuse_time 30 password_verify_function verify_function<br /> sql> password_grace_time 5;<br /> 4.altering a profile<br /> sql> alter profile default failed_login_attempts 3<br /> sql> password_life_time 60 password_grace_time 10;<br /> 5.drop a profile<br /> sql> drop profile grace_5 [cascade];<br /> 6.create a profile : resource limit<br /> sql> create profile developer_prof limit sessions_per_user 2<br /> sql> cpu_per_session 10000 idle_time 60 connect_time 480;<br /> 7. view => resource_cost : alter resource cost<br /> dba_Users,dba_profiles<br /> 8. enable resource limits<br /> sql> alter system set resource_limit=true;<br /> W九(ji)?用户理<br /> 1.create a user: database authentication<br /> sql> create user juncky identified by oracle default tablespace users<br /> sql> temporary tablespace temp quota 10m on data password expire<br /> sql> [account lock|unlock] [profile profilename|default];<br /> 2.change user quota on tablespace<br /> sql> alter user juncky quota 0 on users;<br /> 3.drop a user<br /> sql> drop user juncky [cascade];<br /> 4. monitor user<br /> view: dba_users , dba_ts_quotas<br /> W十?Ҏ(gu)理<br /> 1.system privileges: view => system_privilege_map ,dba_sys_privs,session_privs<br /> 2.grant system privilege<br /> sql> grant create session,create table to managers;<br /> sql> grant create session to scott with admin option;<br /> with admin option can grant or revoke privilege from any user or role;<br /> 3.sysdba and sysoper privileges:<br /> sysoper: startup,shutdown,alter database open|mount,alter database backup controlfile,<br /> alter tablespace begin/end backup,recover database<br /> alter database archivelog,restricted session<br /> sysdba: sysoper privileges with admin option,create database,recover database until<br /> 4.password file members: view:=> v$pwfile_users<br /> 5.O7_dictionary_accessibility =true restriction access to view or tables in other schema<br /> 6.revoke system privilege<br /> sql> revoke create table from karen;<br /> sql> revoke create session from scott;<br /> 7.grant object privilege<br /> sql> grant execute on dbms_pipe to public;<br /> sql> grant update(first_name,salary) on employee to karen with grant option;<br /> 8.display object privilege : view => dba_tab_privs, dba_col_privs<br /> 9.revoke object privilege<br /> sql> revoke execute on dbms_pipe from scott [cascade constraints];<br /> 10.audit record view :=> sys.aud$<br /> 11. protecting the audit trail<br /> sql> audit delete on sys.aud$ by access;<br /> 12.statement auditing<br /> sql> audit user;<br /> 13.privilege auditing<br /> sql> audit select any table by summit by access;<br /> 14.schema object auditing<br /> sql> audit lock on summit.employee by access whenever successful;<br /> 15.view audit option : view=> all_def_audit_opts,dba_stmt_audit_opts,dba_priv_audit_opts,dba_obj_audit_opts<br /> 16.view audit result: view=> dba_audit_trail,dba_audit_exists,dba_audit_object,dba_audit_session,dba_audit_statement<br /> W十一? 规则理?br /> 1.create roles<br /> sql> create role sales_clerk;<br /> sql> create role hr_clerk identified by bonus;<br /> sql> create role hr_manager identified externally;<br /> 2.modify role<br /> sql> alter role sales_clerk identified by commission;<br /> sql> alter role hr_clerk identified externally;<br /> sql> alter role hr_manager not identified;<br /> 3.assigning roles<br /> sql> grant sales_clerk to scott;<br /> sql> grant hr_clerk to hr_manager;<br /> sql> grant hr_manager to scott with admin option;<br /> 4.establish default role<br /> sql> alter user scott default role hr_clerk,sales_clerk;<br /> sql> alter user scott default role all;<br /> sql> alter user scott default role all except hr_clerk;<br /> sql> alter user scott default role none;<br /> 5.enable and disable roles<br /> sql> set role hr_clerk;<br /> sql> set role sales_clerk identified by commission;<br /> sql> set role all except sales_clerk;<br /> sql> set role none;<br /> 6.remove role from user<br /> sql> revoke sales_clerk from scott;<br /> sql> revoke hr_manager from public;<br /> 7.remove role<br /> sql> drop role hr_manager;<br /> 8.display role information<br /> view: =>dba_roles,dba_role_privs,role_role_privs,dba_sys_privs,role_sys_privs,role_tab_privs,session_roles<br /> W十二章: 备䆾与恢?br /> 1. v$sga,v$instance,v$process,v$bgprocess,v$database,v$datafile,v$sgastat<br /> 2. Rman need set dbwr_IO_slaves or backup_tape_IO_slaves and large_pool_size<br /> 3. Monitoring Parallel Rollback<br /> > v$fast_start_servers , v$fast_start_transactions<br /> 4.perform a closed database backup (noarchivelog)<br /> > shutdown immediate<br /> > cp files /backup/<br /> > startup<br /> 5.restore to a different location<br /> > connect system/manager as sysdba<br /> > startup mount<br /> > alter database rename file '/disk1/../user.dbf' to '/disk2/../user.dbf';<br /> > alter database open;<br /> 6.recover syntax<br /> --recover a mounted database<br /> >recover database;<br /> >recover datafile '/disk1/data/df2.dbf';<br /> >alter database recover database;<br /> --recover an opened database<br /> >recover tablespace user_data;<br /> >recover datafile 2;<br /> >alter database recover datafile 2;<br /> 7.how to apply redo log files automatically<br /> >set autorecovery on<br /> >recover automatic datafile 4;<br /> 8.complete recovery:<br /> --method 1(mounted databae)<br /> >copy c:\backup\user.dbf c:\oradata\user.dbf<br /> >startup mount<br /> >recover datafile 'c:\oradata\user.dbf;<br /> >alter database open;<br /> --method 2(opened database,initially opened,not system or rollback datafile)<br /> >copy c:\backup\user.dbf c:\oradata\user.dbf (alter tablespace offline)<br /> >recover datafile 'c:\oradata\user.dbf' or<br /> >recover tablespace user_data;<br /> >alter database datafile 'c:\oradata\user.dbf' online or<br /> >alter tablespace user_data online;<br /> --method 3(opened database,initially closed not system or rollback datafile)<br /> >startup mount<br /> >alter database datafile 'c:\oradata\user.dbf' offline;<br /> >alter database open<br /> >copy c:\backup\user.dbf d:\oradata\user.dbf<br /> >alter database rename file 'c:\oradata\user.dbf' to 'd:\oradata\user.dbf'<br /> >recover datafile 'e:\oradata\user.dbf' or recover tablespace user_data;<br /> >alter tablespace user_data online;<br /> --method 4(loss of data file with no backup and have all archive log)<br /> >alter tablespace user_data offline immediate;<br /> >alter database create datafile 'd:\oradata\user.dbf' as 'c:\oradata\user.dbf''<br /> >recover tablespace user_data;<br /> >alter tablespace user_data online<br /> 5.perform an open database backup<br /> > alter tablespace user_data begin backup;<br /> > copy files /backup/<br /> > alter database datafile '/c:/../data.dbf' end backup;<br /> > alter system switch logfile;<br /> 6.backup a control file<br /> > alter database backup controlfile to 'control1.bkp';<br /> > alter database backup controlfile to trace;<br /> 7.recovery (noarchivelog mode)<br /> > shutdown abort<br /> > cp files<br /> > startup<br /> 8.recovery of file in backup mode<br /> >alter database datafile 2 end backup;<br /> 9.clearing redo log file<br /> >alter database clear unarchived logfile group 1;<br /> >alter database clear unarchived logfile group 1 unrecoverable datafile;<br /> 10.redo log recovery<br /> >alter database add logfile group 3 'c:\oradata\redo03.log' size 1000k;<br /> >alter database drop logfile group 1;<br /> >alter database open;<br /> or >cp c:\oradata\redo02.log' c:\oradata\redo01.log<br /> >alter database clear logfile 'c:\oradata\log01.log';</p> <img src ="http://www.aygfsteel.com/masen/aggbug/327769.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/masen/" target="_blank">Masen</a> 2010-08-02 17:25 <a href="http://www.aygfsteel.com/masen/articles/327769.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDBC下各U数据库的连接字W串和驱动类一?/title><link>http://www.aygfsteel.com/masen/articles/182056.html</link><dc:creator>Masen</dc:creator><author>Masen</author><pubDate>Mon, 25 Feb 2008 09:56:00 GMT</pubDate><guid>http://www.aygfsteel.com/masen/articles/182056.html</guid><wfw:comment>http://www.aygfsteel.com/masen/comments/182056.html</wfw:comment><comments>http://www.aygfsteel.com/masen/articles/182056.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/masen/comments/commentRss/182056.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/masen/services/trackbacks/182056.html</trackback:ping><description><![CDATA[JDBC下各U数据库的连接字W串和驱动类一? <h2 class="ContentAuthor"> </h2> <div class="wmqeeuq" id="log_1"> <div id="wmqeeuq" class="Content-body" id="logcontent_146" style="table-layout: fixed; word-break: break-all"><font color="#0000ff">DB2 v8:<br /> jdbc:db2://host/dbName<br /> COM.ibm.db2.jdbc.net.DB2Driver<br /> <br /> DB2 v9<br /> jdbc:db2://host/dbName:deferPrepares=false;<br /> com.ibm.db2.jcc.DB2Driver<br /> <br /> Informix:<br /> jdbc:informix-sqli://host/dbName:INFORMIXSERVER=server<br /> com.informix.jdbc.IfxDriver<br /> <br /> SQLServer:<br /> jdbc:sqlserver://host;DatabaseName=dbName<br /> com.microsoft.jdbc.sqlserver.SQLServerDriver<br /> <br /> MySQLQ?br /> jdbc:mysql://host/dbName?useUnicode=true&characterEncoding=GBK<br /> com.mysql.jdbc.Driver<br /> <br /> OracleQ?br /> jdbc:oracle:thin:@host:dbName<br /> oracle.jdbc.driver.OracleDriver<br /> <br /> SybaseQ?br /> jdbc:sybase:Tds:host/dbName<br /> com.sybase.jdbc2.jdbc.SybDriver<br /> <br /> Teradata:<br /> jdbc:teradata://host/dbName<br /> com.ncr.teradata.TeraDriver</font>  </div> </div> <br /> <p id="TBPingURL"> </p> <img src ="http://www.aygfsteel.com/masen/aggbug/182056.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/masen/" target="_blank">Masen</a> 2008-02-25 17:56 <a href="http://www.aygfsteel.com/masen/articles/182056.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>分页sqlhttp://www.aygfsteel.com/masen/articles/118702.htmlMasenMasenSun, 20 May 2007 08:42:00 GMThttp://www.aygfsteel.com/masen/articles/118702.htmlhttp://www.aygfsteel.com/masen/comments/118702.htmlhttp://www.aygfsteel.com/masen/articles/118702.html#Feedback0http://www.aygfsteel.com/masen/comments/commentRss/118702.htmlhttp://www.aygfsteel.com/masen/services/trackbacks/118702.htmlMSSQL

如在ms   sqlserver   用此语句Q?nbsp; 
  select   top   2   *   from   test01   ׃(x)只显C前2条记录,  
   
 


MYSQL

select   *   from   your_table   where   ....   limit   2;  
   
  使用limit可以了.

 

Oracle的语? 
select * from (select rownum r ,* from test) tt 
where tt.r > 50 and tt.r <= 100;  (最好用PLSQL游标来解?


DB2中:(x) 
select * from payment fetch first 5 row only --查前5条记?nbsp;

 

MySQL


 
select * from Cat limit ?,?  
select * from Cat limit 20000,100  
从Cat表中W?0000条开始取?00条记录,卌录号?0000?0099的记?nbsp; 
  
select * from Cat limit ?  
select * from Cat limit 100  
从Cat表中取出记录号ؓ(f)1?00的记?nbsp; 
  
select * from Cat order by rand() limit ?  
select * from Cat order by rand() limit 100  
从Cat表中随机取出100条记?nbsp; 

Oracle


 
select * from (select *, rownum rownum_ from Cat where rownum <= ?) where rownum_ > ?  
select * from (select *, rownum rownum_ from Cat where rownum <= 20099) where rownum_ > 19999  
从Cat表中W?0000条开始取?00条记录,卌录号?0000?0099的记?nbsp; 
  
select * from Cat where rownum <= ?  
select * from Cat where rownum <= 100  
从Cat表中取出记录号ؓ(f)1?00的记?nbsp; 
  
select * from (select * from Cat order by dbms_random.value) where rownum < ?  
select * from (select * from Cat order by dbms_random.value) where rownum < 100  
从Cat表中随机取出100条记?nbsp; 

HSQLDB


select * from Cat limit ? ?  
select * from Cat limit 20000 100  
从Cat表中W?0000条开始取?00条记录,卌录号?0000?0099的记?nbsp; 
  
select * from Cat top ?  
select * from Cat top 100  
从Cat表中取出记录号ؓ(f)1?00的记?nbsp; 



Masen 2007-05-20 16:42 发表评论
]]>
Mysql常用函数列表http://www.aygfsteel.com/masen/articles/116812.htmlMasenMasenFri, 11 May 2007 09:38:00 GMThttp://www.aygfsteel.com/masen/articles/116812.htmlhttp://www.aygfsteel.com/masen/comments/116812.htmlhttp://www.aygfsteel.com/masen/articles/116812.html#Feedback0http://www.aygfsteel.com/masen/comments/commentRss/116812.htmlhttp://www.aygfsteel.com/masen/services/trackbacks/116812.html Mysql常用函数列表
字符串类
 
CHARSET(str) //q回字串字符?br>CONCAT (string2  [,... ]) //q接字串
INSTR (string ,substring ) //q回substring首次在string中出现的位置,不存在返?
LCASE (string2 ) //转换成小?br>LEFT (string2 ,length ) //从string2中的左边起取length个字W?br>LENGTH (string ) //string长度
LOAD_FILE (file_name ) //从文件读取内?br>LOCATE (substring , string  [,start_position ] ) 同INSTR,但可指定开始位|?br>LPAD (string2 ,length ,pad ) //重复用pad加在string开?直到字串长度为length
LTRIM (string2 ) //去除前端I格
REPEAT (string2 ,count ) //重复count?br>REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str
RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length
RTRIM (string2 ) //去除后端I格
STRCMP (string1 ,string2 ) //逐字W比较两字串大小,
SUBSTRING (str , position  [,length ]) //从str的position开?取length个字W?
TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字W?br>UCASE (string2 ) //转换成大?br>RIGHT(string2,length) //取string2最后length个字W?br>SPACE(count) //生成count个空?/div>
 
数学c?/u>

ABS (number2 ) //l对?br>BIN (decimal_number ) //十进制{二进?br>CEILING (number2 ) //向上取整
CONV(number2,from_base,to_base) //q制转换
FLOOR (number2 ) //向下取整
FORMAT (number,decimal_places ) //保留数位数
HEX (DecimalNumber ) //转十六进?br>LEAST (number , number2  [,..]) //求最?br>MOD (numerator ,denominator ) //求余
POWER (number ,power ) //求指?br>RAND([seed]) //随机?br>ROUND (number  [,decimals ]) //四舍五入,decimals为小C数]
SIGN (number2 ) //q回W号,正负?
SQRT(number2) //开qx
 
日期旉c?/u>
 
ADDTIME (date2 ,time_interval ) //time_interval加到date2
CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区
CURRENT_DATE (  ) //当前日期
CURRENT_TIME (  ) //当前旉
CURRENT_TIMESTAMP (  ) //当前旉?br>DATE (datetime ) //q回datetime的日期部?br>DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或旉
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式昄datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减M个时?br>DATEDIFF (date1 ,date2 ) //两个日期?br>DAY (date ) //q回日期的天
DAYNAME (date ) //英文星期
DAYOFWEEK (date ) //星期(1-7) ,1为星期天
DAYOFYEAR (date ) //一q中的第几天
EXTRACT (interval_name  FROM date ) //从date中提取日期的指定部分
MAKEDATE (year ,day ) //l出q及(qing)q中的第几天,生成日期?br>MAKETIME (hour ,minute ,second ) //生成旉?br>MONTHNAME (date ) //英文月䆾?br>NOW (  ) //当前旉
SEC_TO_TIME (seconds ) //U数转成旉
STR_TO_DATE (string ,format ) //字串转成旉,以format格式昄
TIMEDIFF (datetime1 ,datetime2 ) //两个旉?br>TIME_TO_SEC (time ) //旉转秒数]
WEEK (date_time [,start_of_week ]) //W几?br>YEAR (datetime ) //q䆾
DAYOFMONTH(datetime) //月的W几?br>HOUR(datetime) //时
LAST_DAY(date) //date的月的最后日?br>MICROSECOND(datetime) //微秒
MONTH(datetime) //?br>MINUTE(datetime) //?/div>
 
?可用在INTERVAL中的cd
DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR


Masen 2007-05-11 17:38 发表评论
]]>
վ֩ģ壺 | | ѷ| ߺ| üɽ| | Ϫ| ľ| Ϫ| ױ| | ʡ| Ƽ| | ̫| | | | | ϰ| Ϫ| | ɽʡ| ν| ɽ| | | ɽ| | | ݶ| ƽɽ| | Դ| ɾ| ˫Ѽɽ| | | | Ұ| Դ|