MySQL中Replace语句用法实例详解

 更新时间:2022年08月08日 09:01:22   作者:ixxqq  
mysql的replace函数是一个非常方便的替换函数,下面这篇文章主要给大家给大家介绍了关于MySQL中Replace语句用法的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

前言

replace into平时在开发中很少用到,这次是因为在做一个生成分布式ID的开源项目,调研雅虎推出的一个基于数据库生成唯一id生成方案:flickr 碰到的一个知识盲点,仅以此篇记录一下。

一、replace into函数

表结构

CREATE TABLE `id_generator` (  
`id` bigint(20) unsigned NOT NULL auto_increment,  
`stub` char(1) NOT NULL default '',  
  PRIMARY KEY  (`id`),  
UNIQUE KEY `stub` (`stub`)  
) ENGINE=MyISAM;

id列是主键索引,stub 列是唯一索引 。

replace into向数据库中插入数据时,如果数据重复,则删除重复的那行数据,然后在插入一行。

replace具备替换拥有唯一索引或者主键索引重复数据的能力,也就是如果使用replace into插入的数据的唯一索引或者主键索引与之前的数据有重复的情况,将会删除原先的数据,然后再进行添加。

那怎么判断是否重复的标准就是:唯一索引或者主键索引是否一致。语法:replace into table( col1, col2, col3 ) values ( val1, val2, val3 )
语义:向table表中col1, col2, col3列replace数据val1,val2,val3

以id_generator表为例:

REPLACE INTO id_generator(stub) VALUES ('trade')
 
 
执行信息如下:
No errors; 1 rows affected, taking 20ms

表示只添加了一行。

执行结果:

+----+--------------+
| id | stub         |
+----+--------------+
| 1  | trade        |
+----+--------------+

接续执行如下语句:

REPLACE INTO id_generator(stub) VALUES ('trade')
 
 
执行信息如下:
No errors; 2 rows affected, taking 23ms

因为删除了一行,添加了一行。

执行结果:

+----+--------------+
| id | stub         |
+----+--------------+
| 3  | trade        |
+----+--------------+

因为stub列创建列唯一索引,所以replace into当stub有重复的数据行时,会删除这行数据重新添加,导致id发生变化。

如果replace into唯一索引 id 重复的话,会怎么样呢?

REPLACE INTO id_generator(id) VALUES (3)
 
 
执行信息如下:
No errors; 2 rows affected, taking 28ms

因为删除了一行,添加了一行。

执行结果:

+----+--------------+
| id | stub         |
+----+--------------+
| 3  |              |
+----+--------------+

这时我们看到stub列的值为空字符串,因为id是唯一索引,id=3的记录已经存在,所以replace into会删除id=3的记录,重新添加,导致stub为空。

二、replace into 、insert ignore 和 insert into的区别

replace into 跟 insert into 功能类似。

不同点在于:

insert into 最普遍的插入,如果表中存在主键相同的数据,执行会报错。

insert ignore 如果表中存在主键相同的数据不在插入该条数据,反之则插入(存在则忽略,反之插入)。

replace into 首先尝试插入数据到表中。

  1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。
  2. 否则,直接插入新数据。

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

三、replace函数

语法:replace(field,search,replace)

说明:field - 数据库表的列名

search - 需要替换的字符串

replace - 替换成的字符串

语义:将列名:field 中出现的search字符串,全部替换成replace字符串。

实例:

update id_generator set stub = replace(stub,'trade','user')
 
select replace(uuid(), '-', '');

附:Mysql中的replace into跟insert into用法类似

  • INSERT :会每次插入一条新的数据。
  • REPLACE:先看表中是否存在此条数据,如果存在,先删除该条数据,再插入一条新的数据;如果不存在,则直接插入一条新的数据

重点:

  • 根据表中的主键或唯一索引来判断,如果表中没有主键或唯一索引,那么REPLACE INTO 就相当于 INSERT

INTO,会直接插入一条数据。

总结

到此这篇关于MySQL中Replace语句用法详解的文章就介绍到这了,更多相关MySQL Replace用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL8.0.23版本的root密码重置最优解法

    MySQL8.0.23版本的root密码重置最优解法

    这篇文章主要介绍了MySQL8.0.23版本的root密码重置最优解法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • MySQL表数据文件损坏导致数据库无法启动的原因与解决方案

    MySQL表数据文件损坏导致数据库无法启动的原因与解决方案

    在日常的数据库管理中,遇到MySQL表数据文件损坏的情况并不罕见,这种情况下,MySQL数据库可能会无法正常启动,给业务运行带来严重影响,本文将探讨如何诊断和解决MySQL表数据文件损坏导致的数据库无法启动问题,需要的朋友可以参考下
    2025-03-03
  • 连接mysql报错——没有设置“usessl=false”的问题

    连接mysql报错——没有设置“usessl=false”的问题

    这篇文章主要介绍了连接mysql报错——没有设置“usessl=false”的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Sysbench多线程性能测试工具

    Sysbench多线程性能测试工具

    sysbench是一个多线程性能测试工具,可以进行CPU/内存/IO/数据库等性能测试,不过我绝大多数的时候都是用它来对数据库(MySQL)进行oltp测试
    2012-11-11
  • 浅谈MySQL next-key lock 加锁范围

    浅谈MySQL next-key lock 加锁范围

    我们知道MYSQL NEXT-KEY LOCK是用来防止幻读,那么MySQL next-key lock 加锁范围是多少,很多人都不知道,本文就来详细的介绍一下
    2021-06-06
  • 利用MySQL统计一列中不同值的数量方法示例

    利用MySQL统计一列中不同值的数量方法示例

    这篇文章主要给大家介绍了利用MySQL统计一列中不同值的数量的几种解决方法,每种方法都给了详细的示例代码供大家参考学习,相信对大家具有一定的参考价值,需要的朋友们下面跟随小编一起来看看吧。
    2017-04-04
  • MySql的存储过程学习小结 附pdf文档下载

    MySql的存储过程学习小结 附pdf文档下载

    这篇文章主要是介绍mysql存储过程的创建,删除,调用及其他常用命令
    2012-03-03
  • 不卸载原有mysql直接安装mysql8.0

    不卸载原有mysql直接安装mysql8.0

    本文主要介绍了不卸载原有mysql直接安装mysql8.0,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Mysql如何获取json字符串/数组的值

    Mysql如何获取json字符串/数组的值

    这篇文章主要介绍了Mysql如何获取json字符串/数组的值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • MySQL之InnoDB存储引擎中的索引用法及说明

    MySQL之InnoDB存储引擎中的索引用法及说明

    这篇文章主要介绍了MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06

最新评论