eygle.com   eygle.com
eygle.com  
 

« 《循序渐进Oracle》+《深入解析Oracle》再版 | Blog首页 | db_file_multiblock_read_count 的自动调整 »

MySQL的Replace Into函数(DELETE/INSERT)

作者:eygle |【转载时请以超链接形式标明文章和作者信息及本声明
链接:

在MySQL中有一个REPLACE INTO的功能,可以在加载数据时,当数据存在时进行UPDATE操作,当数据不存在时进行INSERT操作,这个功能和Oracle的Merge操作颇为类似,Oracle的Merge功能在Oracle 9i提供。

REPLACE依赖于表中的主键或唯一索引,如果一个表中存在的记录与用于PRIMARY KEY或UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。
依赖主键或索引Mysql能够实现快速的判断,使用REPLACE,需要同时拥有表的INSERT和DELETE权限。

Replace首先尝试把新行插入到表中,如果因为主键或唯一键出现冲突而造成插入失败时,则从表中删除含有重复关键字值的冲突行,然后尝试把新行插入到表中。

其命令格式如下:

REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),... 或: REPLACE [LOW_PRIORITY | DELAYED][INTO] tbl_name SET col_name={expr | DEFAULT}, ... 或: REPLACE [LOW_PRIORITY | DELAYED][INTO] tbl_name [(col_name,...)] SELECT ...

 使用REPLACE的最大好处就是可以将delete和insert合二为一,形成一个原子操作。
在执行REPLACE后,系统返回了所影响的行数,如果返回1,说明在表中并没有重复的记录,如果返回2,说明有一条重复记录,系统自动先调用了 delete删除这条记录,然后再记录用insert来插入这条记录。如果返回的值大于2,那说明有多个唯一索引,有多条记录被删除和插入。


历史上的今天...
      >> 2007-03-20文章:
             更改导出文件字符集的小工具
      >> 2006-03-20文章:
             Google也搞笑
      >> 2005-03-20文章:
             Itpub Oracle10g培训
------
这篇 【MySQL的Replace Into函数(DELETE/INSERT)】来自 eygle.com | CSDN网摘| del.icio.us|Google订阅 | 鲜果订阅 | 抓虾订阅

By eygle on 2009-03-20 22:15 | Comments (2) | Posted to Web | Edit |

相关文章 随机文章
  • Oracle 74亿美元购SUN - 彻底改变产业格局
  • SUN公司以及Mysql开源数据库的未来
  • 各取所需:Oracle收购BEA,SUN收购MySQL
  • 使用Perl连接Mysql数据库
  • 使用RMAN进行基于时间点的不完全恢复
    11gR2新特性之二 - Flash Cache 的SSD支持
    xmldom.setCharset无效问题的解决
    连杰老去 元甲收山
    孔府里发现的好东西
    搜索本站:

    留言 (2)

    老大现在也研究mysql了啊

    Posted by: lee at March 21, 2009 11:13 AM

    是客户要考虑在Oracle中实现Replace的功能,借鉴Mysql可以实现,可终归是效率成问题。

    Posted by: eygle at March 21, 2009 1:01 PM

    发表留言:



    Remember Me?
    (输入验证码后方可评论,谢谢支持)



    CopyRight © 2004~2010 eygle.com, All rights reserved.