今天在编程的时候,学习了replace into的用法,真的很好用,是insert into的增强版。在向表中插入数据时,我们经常会遇到这样的情况:1、首先判断数据是否存在;2、如果不存在,则插入;3、如果存在,则更新。

在SQL Server中可以这样处理:

if not exists (select 1 from t where id = 1) 
   insert into t(id, update_time) values(1, getdate())
  else
   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. replace into tbl_name(col_name, ...) values(...)

2. replace into tbl_name(col_name, ...) select ...

3. replace into tbl_name set col_name=value, ...

第一种形式类似于insert into的用法,

第 二种replace select的用法也类似于insert select,这种用法并不一定要求列名匹配,事实上,MYSQL甚至不关心select返回的列名,它需要的是列的位置。例如,replace into tb1(  name, title, mood) select  rname, rtitle, rmood from tb2; 这个例子使用replace into从 tb2中将所有数据导入tb1中。

第三种replace set用法类似于update set用法,使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。

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

转载于:https://www.cnblogs.com/qq530004000/p/4794118.html

MYSQL中replace into的用法相关推荐

  1. mysql中replace函数的用法

    ##-----MySQL数据替换即replace的运用-----## #这里主要介绍一些关于replace函数的用法.关于研究这个主要是发现replace功能很强大 #对于屏蔽关键字很有用处. #现在 ...

  2. MySQL中replace主键_Mysql中replace与replace into的用法讲解

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

  3. mysql中 REPLACE INTO 和 INSERT INTO 的区别

    mysql中 REPLACE INTO 和 INSERT INTO 的区别 REPLACE INTO 和 INSERT INTO 功能类似,都是像表中插入数据,不同点在于:REPLACE INTO 首 ...

  4. MySQL中sum和count用法总结

    MySQL中sum和count用法总结 1.sum 2.count 例子:要求:查询出2门及2门以上不及格者的平均成绩. 3.MySQL 分组之后如何统计记录条数 gourp by 之后的 count ...

  5. MySQL中ESCAPE关键字的用法详解

    MySQL中ESCAPE关键字的用法详解 MySQL中ESCAPE关键字的用法详解 1. mysql转义概述 2. escape验证 MySQL中ESCAPE关键字的用法详解 1. mysql转义概述 ...

  6. mysql 中set函数的用法

    mysql 中set函数的用法 :当值为空时不进行赋值 update user_user <set><if test="nickname!=null and nicknam ...

  7. Mysql中where和having用法及区别

    1.Mysql中Having和Where用法 当SQL语句中使用聚合函数,然后又需要对聚合函数的记录集进行筛选过滤时,这个时候就需要用到Having子句.如果是在聚合函数前过滤记录用Where,在聚合 ...

  8. mysql into_MYSQL中replace into的用法

    新建一个test表,三个字段,id,title,uid,  id是自增的主键,uid是唯一索引: 插入两条数据 insert into test(title,uid) VALUES ('123465' ...

  9. mysql中replace into效率_MYSQL中replace into的用法

    做项目是遇到这样一个问题,把查询出的数据插入到一个新表里面,第一次可以直接插入,但是第二次第三次的时候如果直接更新,但是会有些新的数据需要添加,但是如果先删除再插入的话效率不高,如果对比两端的数据,相 ...

最新文章

  1. 我开发的代码,如何申请版权_代码简介:我花了3个月时间申请开发人员职位。 这是我学到的。...
  2. java 默认字符集 iso_第二篇:JAVA字符编码系列二:Unicode,ISO-8859-1,GBK,UTF-8编码及......
  3. 法国公布“人机协同”项目第二批研究计划
  4. 谷歌浏览器Software Reporter Tool长时间占用CPU解决办法
  5. angularjs启动项目报ERROR in AppModule is not an NgModule解决方法
  6. ttshop是PHP开发的,商家应该如何选择商城系统?
  7. 根据图像连接数判别不同像素所处的位置
  8. 如何使用迅雷下载百度网盘资源
  9. 人工智能常见算法简介
  10. 什么是物联网数据采集网关?物联网数据采集网关的特点
  11. C语言实现简单打字游戏
  12. android 雪球红包脚本,利用adb shell和node.js实现抖音自动抢红包功能(推荐)
  13. astar不能用了_解锁不可切除肝癌治疗的新时代——“T+A”北美上市会纪要
  14. 动态规划——邮局、区间、坐标
  15. Windows多用户配置,不同用户不同访问权限
  16. 国家税务总局河南省电子税务局中,交契税时,报房屋属地税务机关必填的解决方法
  17. 投资不足半年,字节跳动退出李子柒签约公司“微念”
  18. 2020ICPR-化妆演示攻击
  19. netbeans8 EBJ模块中JPA部署问题
  20. Qt编写的项目作品5-物联网综合管理平台

热门文章

  1. html5图像调整大小,JavaScript调整HTML5画布中图像的大小
  2. 没有收到回复的同学注意了,用它一键查询!
  3. datagrid php json,thinkphp和easyui结合中,datagrid等容器获取json数据的方法
  4. 电话号码的字母组合Python解法
  5. java页面登陆密码_java实现页面登陆2 密码加密
  6. tensorflow lstm从隐状态到预测值_机器学习100天-Day2405 循环神经网络RNN(LSTM)
  7. java 字符串模糊匹配_Java实现伪查询(全匹配+模糊匹配)
  8. android mysql sqlite_Android SQLite (一) 数据库简介
  9. wpf开发仿真3d软件_web 3d 与仿真
  10. mysql 缓存监控_MySql 缓存查询原理与缓存监控 和 索引监控