`
jjhpeopl
  • 浏览: 110218 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql的replace into“坑”

阅读更多
在向表中插入数据的时候,经常遇到这样的情况:1. 首先判断数据是否存在; 2. 如果不存在,则插入;3.如果存在,则更新。
 
这种情况就可以使用replace into语句来解决,但是有没有问题,且看下去
 
下面是数据更新前的样子

在auto这个表中,k字段是唯一索引,当执行replace into auto (k,v) values (10,11);后,数据变为
 

 
 从图中可以看到,id=10的那条记录没有了,新增加了一条id=23的记录,而且k,v的值正好是咱们刚想更新的值
 
再执行一个语句replace into auto (k,v) values (9,9);观察结果如下
 
这次是真的增加了一条id=24的记录,而其他记录没有任何变化。
 
通过以上操作可以看出replace into执行的逻辑
1、遇到PRIMARY KEY或UNIQUE索引的,新记录与旧记录有冲突的(这里实际产生了异常duplicate key error),会把旧记录删除,然后再插入新记录
2、若是新记录没有冲突,就直接插入一条新记录,与insert into一样
 
看起来很正常,这里针对第一种逻辑会有问题
1、把旧记录删除之后,插入的新记录只是插入了那些指定的字段,原本不想更新的字段,直接为默认值了,会导致数据丢失
2、若旧记录的id跟其他表是有关联的,更新后新记录会产生新的id,导致这种关联丢失
3、而且使用replace into会导致自增主键id一直增大,很容易导致id值范围不够用
另外,若是数据库存在主从关系,在主机器上进行了replace into操作之后,从机器上对应表的AUTO_INCREMENT是不会更新的,导致从机器转为主机器时,新插入数据会出现异常,直到AUTO_INCREMENT增加到原来主机器的值为止。 
  • 大小: 32.1 KB
  • 大小: 60.6 KB
  • 大小: 86.4 KB
0
0
分享到:
评论

相关推荐

    MySQL replace into 用法.txt

    根据提供的文件信息,本文将详细解释 MySQL 中 `REPLACE INTO` 的使用方法及特性,并对比其与 `INSERT INTO` 的不同之处。 ### MySQL REPLACE INTO 介绍 #### 1. REPLACE INTO 的基本概念 `REPLACE INTO` 是 ...

    解析SQL语句中Replace INTO与INSERT INTO的不同之处

    在编程接口(如 C API)中,你可以使用 `mysql_affected_rows()` 函数来获取受影响的行数,以判断 `REPLACE INTO` 是否只添加了一行还是同时替换了其他行。 `REPLACE INTO` 的语法格式如下: ```sql REPLACE [LOW_...

    MySQL replace into 语句浅析(一)

    MySQL中的`REPLACE INTO`语句是一个非常实用的数据库操作,它在特定场景下能替代`INSERT`和`UPDATE`的组合使用。本篇文章将深入浅出地解析`REPLACE INTO`的原理、使用方法以及适用场景,并通过实例来演示其工作方式...

    浅析MySQL replace into 的用法

    在 SQL Server 中可以这样处理: 代码如下: if not exists (select 1 from t where id = 1) ...MySQL 中有更简单的方法: replace into 代码如下: replace into t(id, update_time) values(1, now());或 repl

    MySQL Replace INTO的使用

    MySQL中的`REPLACE INTO`语句是一个非常有用的命令,它的工作方式类似于`INSERT`,但带有一种自动删除和替换的功能。当试图插入的数据与表中已存在的唯一索引(包括 PRIMARY KEY 或 UNIQUE 索引)冲突时,`REPLACE ...

    Mysql中replace与replace into的用法讲解

    MySQL中的`REPLACE`和`REPLACE INTO`是两种用于数据插入或更新的SQL语句,它们在处理数据冲突时有独特的策略。首先,我们来分别解析这两个命令。 `REPLACE`函数通常指的是字符串处理函数,它在MySQL中用于替换字符...

    mysql中replace into的用法详解

    replace into语句会根据唯一键/主键删除原有的一条记录, 并且插入一条新的记录来替换原记录。如果没有表不存在唯一键/主键 或者 插入的数据唯一键/主键没有重复的,那么会新增一条记录。 新建一个test表,三个字段...

    MySQL的Replace into 与Insert into on duplicate key update真正的不同之处

    MySQL中的`REPLACE INTO`和`INSERT INTO ... ON DUPLICATE KEY UPDATE`是两种处理数据冲突的方法,它们在处理已有键值冲突时的行为有所不同。这两种语句都是在插入新记录时,如果发现存在相同的唯一键值,则采取不同...

    MySQL使用Replace操作时造成数据丢失的问题解决

    公司开发人员在更新数据时使用了 replace into 语句,由于使用不当导致了数据的大量丢失,到底是如何导致的数据丢失本文对此进行分析。 一、问题说明 公司开发人员在更新数据时使用了 replace into 语句,由于使用...

    MySQL中REPLACE INTO和INSERT INTO的区别分析

    在MySQL数据库中,`REPLACE INTO` 和 `INSERT INTO` 是两种不同的数据插入语句,它们各有其特定的用途和行为。理解它们的区别对于优化数据库操作至关重要。 首先,`INSERT INTO` 是最基本的数据插入语句,它用于在...

    mysql 替换字段部分内容及mysql 替换函数replace()

    [mysql]replace的用法(替换某字段部分内容) [mysql]replace的用法 1.replace into  replace into table (id,name) values(‘1′,’aa’),(‘2′,’bb’)  此语句的作用是向表table中插入两条记录。如果主键id为...

    MySQL中replace into语句的用法详解

    MySQL中的`REPLACE INTO`语句是一个非常实用的命令,它结合了`INSERT`和`UPDATE`的功能,简化了在数据库表中处理已有数据的工作流程。这个语句主要用于当你要插入一条新记录,但该记录的主键或唯一索引字段与现有...

    MySQL REPLACE死锁问题深入剖析1

    MySQL中的REPLACE语句在处理数据时,实际上是一种删除加插入的组合操作,但与简单的DELETE后跟INSERT不同,它涉及到更复杂的锁机制,可能导致死锁。深入理解这些机制对于解决高级MySQL问题至关重要。 首先,我们...

    MySQL replace into 语句浅析(二)

    本章内容通过一个例子说明 replace into 带来的潜在的数据质量风险,当涉及replace into操作的表含有自增主键时,主备切换后会造成数据覆盖等不一致的情况发生。 二 案例分析 在主库上操作 代码如下: root@test 12:36...

    mysql 的replace into实例详解

    MySQL中的`REPLACE INTO`语句是一个非常实用的数据库操作命令,它在处理数据时具有独特的功能,尤其是在处理存在唯一性约束的表时。`REPLACE INTO`与`INSERT INTO`相似,但它们在处理已有数据时的行为有所不同。在...

Global site tag (gtag.js) - Google Analytics