天空小小岛技术论坛

 找回密码
 注册
搜索
查看: 4201|回复: 0
打印 上一主题 下一主题

Replace Into函数(DELETE/INSERT)

[复制链接]
跳转到指定楼层
1#
八号 发表于 2009-10-24 20:47:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在MySQL中有一个REPLACE INTO的功能,可以在加载数据时,当数据存在时进行UPDATE操作,当数据不存在时进行INSERT操作,这个功能和Oracle的Merge操作颇为类似,Oracle的Merge功能在Oracle 9i提供。

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

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

其命令格式如下:
  1. REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),...

  2. REPLACE [LOW_PRIORITY | DELAYED][INTO] tbl_name SET col_name={expr | DEFAULT}, ...

  3. REPLACE [LOW_PRIORITY | DELAYED][INTO] tbl_name [(col_name,...)] SELECT ...
复制代码
使用REPLACE的最大好处就是可以将delete和insert合二为一,形成一个原子操作。
在执行REPLACE后,系统返回了所影响的行数,如果返回1,说明在表中并没有重复的记录,如果返回2,说明有一条重复记录,系统自动先调用了 delete删除这条记录,然后再记录用insert来插入这条记录。如果返回的值大于2,那说明有多个唯一索引,有多条记录被删除和插入。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|天空小小岛  |京ICP备2025130156号|

GMT+8, 2025-6-22 19:38 , Processed in 0.092901 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表