MySQL into_Mysql中replace与replace into用法案例详解


Posted in MySQL onSeptember 14, 2021

Mysql replace与replace into都是经常会用到的功能;replace其实是做了一次update操作,而不是先delete再insert;而replace into其实与insert into很相像,但对于replace into,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。

replace是mysql 里面处理字符串比较常用的函数,可以替换字符串中的内容。类似的处理字符串的还有trim截取操作,这里就不在多说。

replace into 主要作用类似insert插入操作。主要的区别是replace会根据主键或者唯一索引检查数据是否存在,如果存在就先删除在更新。

例子:

#表结构:

CREATE TABLE `t_test` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(1) NOT NULL DEFAULT '',

PRIMARY KEY (`id`),

UNIQUE KEY `idx_name` (`name`) USING BTREE

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

插入第一条记录

INSERT INTO t_test (`name`)VALUES('a')

#或者

REPLACE INTO t_test (`name`)VALUES('a')

采用上面的方式插入二条记录,insert into 会提示错误:1062 - Duplicate entry ‘a' for key ‘idx_name', Time: 0.001000s。使用replace into则会正常执行,只是id自增长1。

ps:replace into 中into关键字可以省略的,看起来一样,使用有点区别

一、replace(object,search,replace)

把object中出现search的全部替换为replace

select replace('www.3water.com','w','n') from ...    --->   nnn.3water.com

例:把表table中的name字段中的detail替换为description

update table set name=replace(name,'detail','description')

二、replace into

相当于: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;

REPLACE的运行与INSERT很相像。如果表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。

注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。

所有列的值均取自在REPLACE INTO语句中被指定的值。所有缺失的列被设置为各自的默认值,这和INSERT INTO一样。您不能从当前行中引用值,也不能在新行中使用值。如果您使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。

使用REPLACE INTO,必须拥有表的INSERT和DELETE权限。

REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和。如果对于一个单行REPLACE该数为1,则一行被插入,同时没有行被删除。如果该数大于1,则在新行被插入前,有一个或多个旧行被删除。如果表包含多个唯一索引,并且新行复制了在不同的唯一索引中的不同旧行的值,则有可能是一个单一行替换了多个旧行。

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

目前,您不能在一个子查询中,向一个表中更换,同时从同一个表中选择。

以下是所用算法的更详细的说明(该算法也用于LOAD DATA...REPLACE):

1. 尝试把新行插入到表中

2. 当因为对于主键或唯一关键字出现重复关键字错误而造成插入失败时:

a. 从表中删除含有重复关键字值的冲突行

b. 再次尝试把新行插入到表中

三种形式:

  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, ...

PS:

mysql中常用的三种插入数据的语句:

insert into表示插入数据,数据库会检查主键,如果出现重复会报错;

replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;

insert ignore表示,如果中已经存在相同的记录,则忽略当前新数据;

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

到此这篇关于MySQL into_Mysql中replace与replace into用法案例详解的文章就介绍到这了,更多相关MySQL into_Mysql中replace与replace into用法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
修改MySQL的数据库引擎为INNODB的方法
May 26 MySQL
MySQL 如何设计统计数据表
Jun 15 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
MySQL索引是啥?不懂就问
Jul 21 MySQL
MyBatis 动态SQL全面详解
Oct 05 MySQL
MySQL实例精讲单行函数以及字符数学日期流程控制
Oct 15 MySQL
MySQL七种JOIN类型小结
Oct 24 MySQL
mysql主从复制的实现步骤
Oct 24 MySQL
Mysql使用全文索引(FullText index)的实例代码
Apr 03 MySQL
MySQL中的全表扫描和索引树扫描
May 15 MySQL
MySQL如何修改字段类型和字段长度
Jun 10 MySQL
mysql中关键词exists的用法实例详解
Jun 10 MySQL
MYSQL 的10大经典优化案例场景实战
Sep 14 #MySQL
MySQL中连接查询和子查询的问题
mysql配置SSL证书登录的实现
MySQL约束超详解
Sep 04 #MySQL
MySQL中的隐藏列的具体查看
Sep 04 #MySQL
Mysql实现简易版搜索引擎的示例代码
Aug 30 #MySQL
详细聊聊MySQL中慢SQL优化的方向
Aug 30 #MySQL
You might like
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
php网页病毒清除类
2014/12/08 PHP
php获取当月最后一天函数分享
2015/02/02 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
JavaScript 判断日期格式是否正确的实现代码
2011/07/04 Javascript
浅谈Javascript事件模拟
2012/06/27 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
js实现页面跳转的五种方法推荐
2016/03/10 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
2016/07/04 Javascript
jquery获取点击控件的绝对位置简单实例
2016/10/13 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
轻松学习Javascript闭包
2017/03/01 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
Angular4学习笔记router的简单使用
2018/03/30 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
vue等两个接口都返回结果再执行下一步的实例
2020/09/08 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python字符串格式化的方法(两种)
2017/09/19 Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
Python中的pack和unpack的使用
2018/03/12 Python
python实现n个数中选出m个数的方法
2018/11/13 Python
python实现将汉字保存成文本的方法
2018/11/16 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
python中取绝对值简单方法总结
2020/07/24 Python
Python执行时间的几种计算方法
2020/07/31 Python
详解python变量与数据类型
2020/08/25 Python
手工制作的意大利礼服鞋:Ace Marks
2018/12/15 全球购物
意大利一家专营包包和配饰的网上商店:Borse Last Minute
2019/08/26 全球购物
计算机专业毕业生自荐信范文
2014/03/06 职场文书
2014年党建工作汇报材料
2014/10/27 职场文书
2014年科协工作总结
2014/12/09 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
2015初中团支部工作总结
2015/07/21 职场文书