MySQL中Replace语句用法实例详解

目录
  • 前言
  • 一、replace into函数
  • 二、replace into 、insert ignore 和 insert into的区别
  • 三、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用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL replace函数替换字符串语句的用法

    MySQL replace函数我们经常用到,下面就为您详细介绍MySQL replace函数的用法,希望对您学习MySQL replace函数方面能有所启迪. 最近在研究CMS,在数据转换的时候需要用到mysql的MySQL replace函数,这里简单介绍一下. 比如你要将表 tb1里面的 f1字段的abc替换为def UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def'); REPLACE(str,from_str,to_str) 在字符串 str 中所有出现

  • MYSQL 批量替换之replace语法的使用详解

    实际需求中,需要对某张表某字段里面的内容进行批量替换,普通的思考流程如下:SELECT出来str_replace替换UPDATE写入实际这样极其浪费资源以及消耗资源,MYSQL内置了一个批量替换的语法 复制代码 代码如下: UPDATE table SET field = replace(field,'被替换','替换成') 直接就替换了,后面也可以跟WHERE 条件语句支持多个词同时被替换 复制代码 代码如下: UPDATE table SET field = replace(field,'被

  • mysql数据库replace、regexp的用法

    replace.regexp的用法 0 Comments | This entry was posted on Apr 08 2010 mysql replace用法 1.replace into replace into table (id,name) values('1′,'aa'),('2′,'bb') 此语句的作用是向表table中插入两条记录.如果主键id为1或2不存在 就相当于 insert into table (id,name) values('1′,'aa'),('2′,'bb

  • mySQL中replace的用法

    mysql replace实例说明: UPDATE tb1 SET f1=REPLACE(f1, 'abc', 'def'); REPLACE(str,from_str,to_str) 在字符串 str 中所有出现的字符串 from_str 均被 to_str替换,然后返回这个字符串 这个函数用来批量替换数据中的非法关键字是很有用的!如下例子: 例1:UPDATE BBSTopic SET tcontents = replace(replace(tcontents,'共产党','') ,'找死'

  • MySQL中replace into语句的用法详解

    在向表中插入数据的时候,经常遇到这样的情况: 1.首先判断数据是否存在: 2.如果不存在,则插入: 3.如果存在,则更新.   在 SQL Server 中可以这样写: 复制代码 代码如下: if not exists (select 1 from table where id = 1) insert into table(id, update_time) values(1, getdate()) else update table set update_time = getdate() whe

  • MySQL中Replace语句用法实例详解

    目录 前言 一.replace into函数 二.replace into .insert ignore 和 insert into的区别 三.replace函数 总结 前言 replace into平时在开发中很少用到,这次是因为在做一个生成分布式ID的开源项目,调研雅虎推出的一个基于数据库生成唯一id生成方案:flickr 碰到的一个知识盲点,仅以此篇记录一下. 一.replace into函数 表结构 CREATE TABLE `id_generator` ( `id` bigint(20

  • MySQL数据类型中DECIMAL的用法实例详解

    MySQL数据类型中DECIMAL的用法实例详解 在MySQL数据类型中,例如INT,FLOAT,DOUBLE,CHAR,DECIMAL等,它们都有各自的作用,下面我们就主要来介绍一下MySQL数据类型中的DECIMAL类型的作用和用法. 一般赋予浮点列的值被四舍五入到这个列所指定的十进制数.如果在一个FLOAT(8, 1)的列中存储1. 2 3 4 5 6,则结果为1. 2.如果将相同的值存入FLOAT(8, 4) 的列中,则结果为1. 2 3 4 6. 这表示应该定义具有足够位数的浮点列以便

  • Mysql中Join的使用实例详解

    在前几章节中,我们已经学会了如果在一张表中读取数据,这是相对简单的,但是在真正的应用中经常需要从多个数据表中读取数据. 本章节我们将向大家介绍如何使用MySQL 的 JOIN 在两个或多个表中查询数据. 你可以在SELECT, UPDATE 和 DELETE 语句中使用Mysql 的 join 来联合多表查询. 以下我们将演示MySQL LEFT JOIN 和 JOIN 的使用的不同之处. 在命令提示符中使用JOIN 我们在RUNOOB数据库中有两张表 tcount_tbl 和 runoob_t

  • MySql中JOIN的用法示例详解

    目录 笛卡尔积:CROSS JOIN 内连接:INNER JOIN 左连接:LEFT JOIN 右连接:RIGHT JOIN 外连接:OUTER JOIN USING子句 自然连接:NATURE JOIN 上次面试被问到JOIN,自己都已经忘了课堂上讲的笛卡尔积那些就是JOIN,最近重新复习了一遍 JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接. 先创建两个表,下面用于示例 CREATE TABLE t_blog( id INT PRIM

  • mysql存储过程之case语句用法实例详解

    本文实例讲述了mysql存储过程之case语句用法.分享给大家供大家参考,具体如下: 除了if语句,mysql提供了一个替代的条件语句CASE. mysql的 CASE语句使代码更加可读和高效.废话不多说,我们先来看下简单case语句的语法: CASE case_expression WHEN when_expression_1 THEN commands WHEN when_expression_2 THEN commands ... ELSE commands END CASE; 我们可以使

  • mysql存储过程之if语句用法实例详解

    本文实例讲述了mysql存储过程之if语句用法.分享给大家供大家参考,具体如下: mysql中的 IF语句允许我们根据表达式的某个条件或值结果来执行一组SQL语句,所以我们要在MySQL中形成一个表达式,可以结合文字,变量,运算符,甚至函数来组合.表达式可以返回TRUE,FALSE或NULL,这三个值之一.来看下语法结构: IF expression THEN statements; END IF; 如果上述表达式(expression)计算结果为TRUE,那么将执行statements语句,否

  • mysql学习笔记之完整的select语句用法实例详解

    本文实例讲述了mysql学习笔记之完整的select语句用法.分享给大家供大家参考,具体如下: 本文内容: 完整语法 去重选项 字段别名 数据源 where group by having order by limit 首发日期:2018-04-11 完整语法: 先给一下完整的语法,后面将逐一来讲解. 基础语法:select 字段列表 from 数据源; 完整语法:select 去重选项 字段列表 [as 字段别名] from 数据源 [where子句] [group by 子句] [havin

  • C#中while循环语句用法实例详解

    本文实例讲述了C#中while循环语句用法.分享给大家供大家参考.具体实现方法如下: 在C#中while循环是我们经常会用到的一种循环语句,while循环特点是直到条件为零时才跳出循环,当然中间可以利用其它函数直接跳出,对于while的具体用法有必要做一个较为详尽的分析. 先来说Foreach和For的区别,Foreach是针对对象进行遍历的,不需要定义循环次数,但是有个缺点,Foreach遍历取的是只读数据,不能在Foreach中进行对象的增删改,而For循环就可以.这个改成while循环的代

  • mysql视图原理与用法实例详解

    本文实例讲述了mysql视图原理与用法.分享给大家供大家参考,具体如下: 本文内容: 什么是视图 创建视图 查看视图 视图的修改 视图的删除 视图的数据操作 首发日期:2018-04-13 什么是视图: 视图是一种基于查询结果的虚拟表,数据来源的表称为基本表. 视图的建立和删除不影响基本表. 视图的插入,修改操作会影响基本表. 如果视图来自多个基本表,那么不可以修改基本表. 视图的用处: 1.视图基于查询结果,使得视图可以隐藏基本表一些不该展示给用户的数据信息(比如某个开发人员需要用户信息表,但

  • Python中optparser库用法实例详解

    本文研究的主要是Python中optparser库的相关内容,具体如下. 一直以来对optparser不是特别的理解,今天就狠下心,静下心研究了一下这个库.当然了,不敢说理解的很到位,但是足以应付正常的使用了.废话不多说,开始今天的分享吧. 简介 optparse模块主要用来为脚本传递命令参数功能. 引入 在IDE中引入optparser是很方便的. from optparser import OptionParser 初始化 相对而言,初始化需要我们多注意一点点了. 因为我们有两种不同的方式来

随机推荐