设为首页收藏本站

IT技术擎 - 最棒的IT web技术交流社区

 找回密码
 注册为IT技术擎人

QQ登录

只需一步,快速开始

搜索
热搜: php h5 jquery
查看: 39|回复: 0

[mysql] MySQL:讨人喜欢的 MySQL replace into 用法(insert into 的增强版)

[复制链接]

1万

主题

1万

帖子

5万

积分

版主

Rank: 7Rank: 7Rank: 7

积分
52861
发表于 2018-2-13 23:20:36 | 显示全部楼层 |阅读模式

讨人喜欢的 MySQL replace into 用法(insert into 的增强版)
在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。
在 SQL Server 中可以这样处理:
  1. 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
  1. replace into t(id, update_time) values(1, now());
复制代码
  1. 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 将自动为这些列赋上默认值。



上一篇:关于令元素垂直居中的总结
下一篇:模板引擎的基础工作原理
该用户未在地球留下任何的痕迹

本版积分规则

QQ|小黑屋|帮助|IT技术擎 ( 沪ICP备15054863号  

GMT+8, 2018-8-22 15:47

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

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