MySQL replace into 用法(insert into 的增强版)

在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。

在 SQL Server 中可以这样处理:

  1. if not exists (select 1 from t where id = 1)
  2. insert into t(id, update_time) values(1, getdate())
  3. else
  4. update t set update_time = getdate() where id = 1

那么 MySQL 中如何实现这样的逻辑呢?别着急!MySQL 中有更简单的方法: replace into

replace into t(id, update_time) values(1, now());

replace into t(id, update_time) select 1, now();

replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

MySQL replace into 有三种形式:

  1. 1. replace into tbl_name(col_name, ...) values(...)
  2. 2. replace into tbl_name(col_name, ...) select ...
  3. 3. replace into tbl_name set col_name=value, ...

前两种形式用的多些。其中 “into” 关键字可以省略,不过最好加上 “into”,这样意思更加直观。另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。

replace详细说明:

参考资料:http://dev.mysql.com/doc/refman/5.0/en/replace.html

REPLACE作品完全一样 的INSERT,但如果旧表中的行具有相同的值作为一个新行 PRIMARY KEYUNIQUE 索引,旧行插入新行之前删除。请参见 第13.2.5节,“INSERT语法”。

REPLACE是一个MySQL扩展SQL标准。它要么插入或删除 和插入。另一个MySQL扩展到标准的SQL,要么插入或 更新 -请参阅 第13.2.5.3,“INSERT ... ON DUPLICATE KEY UPDATE的SQL语法”。

请注意,除非表有一个PRIMARY KEY或 UNIQUE索引,使用 REPLACE语句是没有意义的。它变成相当于INSERT,因为要使用没有索引,以确定新的行是否会复制另外一个。

值的所有列都来自于指定的值 REPLACE语句。任何缺失的列被设置为各自的默认值,就像发生在 INSERT。您不能从当前行参考值,并使用他们的新行。如果您使用的作业,如设置 COL_NAME = COL_NAME +1,参考列名在右边被视为 默认(COL_NAME),所以转让相当于SET COL_NAME = DEFAULT(COL_NAME)+1。

要使用REPLACE,您必须同时拥有INSERT和 DELETE的表的权限。

REPLACE语句返回一个数来表示受影响的行数。这是删除和插入的行的总和。如果计数1为单排 更换,连续被插入并没有行被删除。如果计数插入新行之前大于1,一个或多个旧行被删除。这是可能的单行替换多个旧行如果表包含多个唯一索引,并且新行复制的值在不同的唯一索引中的不同旧行。

受影响的行数可以很容易地确定是否 REPLACE只添加了一行,或者是否也换成任何行:检查是否计数1(添加)或更大(替换)。

如果您正在使用C API时,受影响的行数可以通过获得 mysql_affected_rows()函数。

目前,您不能更换成一个表,并从同一个表中的子查询中选择。

MySQL使用下列算法 REPLACE(和LOAD DATA ... REPLACE):

  1. 尝试插入新行插入表

  2. 而插入失败,因为发生在主键或唯一索引的重复键错误:

    1. 从表中删除了重复的键值冲突的行

    2. 再次尝试插入新行插入表

可能的是在一个重复键错误的情况下,存储引擎可以执行REPLACE作为更新,而不是删除加插入,但语义是相同的。有没有比如何存储引擎增加一个可能的差异其他用户可见的效果 Handler_ XXX状态变量。

MySQL replace into 用法相关推荐

  1. MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

    讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...

  2. oracle insert replace into,讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

    讨人喜欢的 MySQL replace into 用法(insert into 的增强版) 在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在: 2. 如果不存在,则插入:3.如果 ...

  3. mysql replace into用法详细说明

     REPLACE的运行与INSERT很相似.只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除.  注 ...

  4. mysql数据库replace写入_MySQL数据库replace into 用法(insert into 的增强版)

    MySQL数据库replace into 用法我以前介绍过相关的教程,但有加强版各位朋友可能不知道吧,今天我们来看一篇关于MySQL数据库replace into增强版的介绍与用法例子. Error ...

  5. MySQL replace into (insert into 的增强版)

    在使用SQL语句进行数据表插入insert操作时,如果表中定义了主键,插入具有相同主键的记录会报错:  Error Code: 1062. Duplicate entry 'XXXXX' for ke ...

  6. mysql replace

    http://blog.csdn.net/sahusoft/article/details/4446877 讨人喜欢的 MySQL replace into 用法(insert into 的增强版) ...

  7. mysql的replace_mySQL中replace的用法

    mysql replace实例说明: UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def'); REPLACE(str,from_str,to_str) 在字符串 st ...

  8. mysql replace报错_Mysql中replace与replace into的用法讲解

    Mysql replace与replace into都是经常会用到的功能:replace其实是做了一次update操作,而不是先delete再insert:而replace into其实与insert ...

  9. MySQL Replace INTO的使用

    MySQL Replace INTO的使用 今天DST里面有个插件作者问我关于Replace INTO和INSERT INTO的区别,我和他说晚上上我的blog看吧,那时候还在忙,现在从MYSQL手册 ...

最新文章

  1. 程序员的“凡尔赛文学”大赏!
  2. the first weekend of ChengDu
  3. 三角网导线平差实例_导线测量平差实例
  4. leetcode 1345. Jump Game IV | 1345. 跳跃游戏 IV(BFS)
  5. 华为交换机不同网段互访_华为S5700系列交换机使用高级ACL限制不同网段的用户互访...
  6. aide入侵检测工具与crontab
  7. CoolUIViewAnimations
  8. 深入理解计算机系统1——计算机系统漫游
  9. python爬虫之js链接跳转抓取_Python爬虫获取页面所有URL链接过程详解
  10. matlab 中pid tuning,PID Tuning Algorithm
  11. div中文字居中加粗
  12. 离线抓取域登录缓存hash(mscash)
  13. 类对象工厂设计模式(Factory Pattern)
  14. 服务器上qq邮件不能打开方式,QQ邮箱打不开是怎么回事?从QQ面板上打不开QQ邮箱怎么解决?...
  15. 【模糊回归预测】基于matlab萤火虫算法优化模糊神经网络回归预测【含Matlab源码 2034期】
  16. 信息安全 SEED Lab2 Shellshock Attack
  17. 制作U盘启动来安装Linux系统的具体方法(图文)
  18. python使用cer证书进行https访问接口
  19. 黄海导航软件测试,测试软件平台环境一览
  20. 【PHP框架 | Laravel8 系列5】 - 视图与CSRF保护

热门文章

  1. 程序和计划任务管理( 查看进程ps,控制进程,终止命令进程,top命令,at一次性任务,crontab周期任务)
  2. 马云马化腾,过的哪个冬
  3. ant app 心电监测_医疗级心电健康手表,随时随地监测你的健康,心电手表H1手表评测...
  4. tomcat 项目发布失败原因_项目启动tomcat失败的几种可能原因和解决方法
  5. tcpdump 识别成dns_1.6.3 使用tcpdump观察DNS通信过程
  6. kux转换为mp4软件_kux2mp4(优酷kux转换为mp4软件)下载-kux2mp4(优酷kux转换为mp4软件)免费版下载v2021...
  7. 深圳python指南_深圳Pythonlevel7
  8. java 创建文件夹的方法_Java创建文件夹的方法
  9. mysql忘了root密码_mysql忘记root密码怎么办
  10. python程序中怎样数个数_python3中的代码行数是怎么计算的?