`
onedada
  • 浏览: 103313 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

MYSQL中replace into的用法

 
阅读更多

本文转载自:   http://blog.knowsky.com/240717.htm

 

 

今天在编程的时候,学习了replace into的用法,真的很好用,是insert into的增强版。在向表中插入数据时,我们经常会遇到这样的情况:1、首先判断数据是否存在;2、如果不存在,则插入;3、如果存在,则更新。

SQL Server中可以这样处理:

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

replace into t(id, update_time) values(1, now());

replace into t(id, update_time) select 1, now();

replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

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

MySQL replace into 有三种形式:

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

第一种形式类似于insert into的用法,

第 二种replace select的用法也类似于insert select,这种用法并不一定要求列名匹配,事实上,MYSQL甚至不关心select返回的列名,它需要的是列的位置。例如,replace into tb1( name, title, mood) select rname, rtitle, rmood from tb2;?这个例子使用replace into从?tb2中将所有数据导入tb1中。

第三种replace set用法类似于update set用法,使用一个例如“SET col_name = col_name + 1”的赋值,则对位于右侧的列名称的引用会被作为DEFAULT(col_name)处理。因此,该赋值相当于SET col_name = DEFAULT(col_name) + 1。

前两种形式用的多些。其中 “into” 关键字可以省略,不过最好加上 “into”,这样意思更加直观。另外,对于那些没有给予值的列,MySQL 将自动为这些列赋上默认值。

 

 

 

 

 

 

分享到:
评论
1 楼 njitluoluo 2015-09-07  
replace into 要慎用。
很容易引起主备库数据不同步, replace的逻辑是如果存在记录 则会先删除,再添加。这样导致主库主键++,但是备库完全感知不到,主键不同步。踩过这个坑

相关推荐

    MySQL replace into 用法.txt

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

    Mysql中replace与replace into的用法讲解

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

    mysql中replace into的用法详解

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

    MySQL中replace into语句的用法详解

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

    浅析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 语句浅析(一)

    本篇文章将深入浅出地解析`REPLACE INTO`的原理、使用方法以及适用场景,并通过实例来演示其工作方式。 ### 一、介绍 `REPLACE INTO`语句在MySQL中主要用于处理插入数据时可能出现的主键或唯一索引冲突问题。当...

    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实例详解

    总的来说,`REPLACE INTO`是MySQL中处理数据插入和更新的一个强大工具,但使用时需谨慎,因为它会彻底删除已存在的行。正确理解和使用`REPLACE INTO`能帮助你在数据库管理中避免数据冗余和不一致,提高数据的整洁性...

    mysql 中 replace into 与 insert into on duplicate key update 的用法和不同点实例分析

    在MySQL中,`REPLACE INTO` 和 `INSERT INTO ON DUPLICATE KEY UPDATE` 是两种处理数据插入时冲突的方法,主要用于处理当试图插入一条记录,而该记录的唯一键或主键已经在表中存在的情况。这两种方法都可以实现如果...

    MySQL中如何处理重复数据(Duplicate)?

    REPLACE INTO 语句是在 MySQL 中处理重复数据的另一种方法。该语句在插入数据时,如果遇到唯一键冲突,会先删除已有的数据,然后再进行插入操作。示例: REPLACE INTO table_name (col1, col2, col3) VALUES (val1,...

    mysql 批量更新及效率对比

    在 MySQL 中批量更新记录时,使用 Replace Into 或 Insert Into ... On Duplicate Key Update 语句可以大大提高更新效率,而使用临时表的方法也可以提高效率,但是需要用户有 temporary 表的 create 权限。

    insert 和replace的区别及用法

    INSERT 和 REPLACE 语句在 MySQL 中的使用和区别 INSERT 语句是 MySQL 中最基本的数据插入语句,它有两种基本形式:INSERT INTO 语句和 INSERT SET 语句。INSERT INTO 语句的基本语法是 INSERT INTO tablename(列名...

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

    在问题描述中,开发人员在更新`active_items`表时使用了`REPLACE INTO`语句,导致数据丢失。这是因为`REPLACE`不仅替换指定的字段(如`ad_id`和`score`),还会将所有未指定的字段设置为默认值,从而清空了原有数据...

    MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解.pdf

    - 在MySQL中,还支持使用SET关键字,如`INSERT INTO tablename SET column_name1 = value1, column_name2 = value2, ...;` - 如果表中有默认值或自动增长的字段,可以直接省略这些字段的值。 - MySQL还允许一次性...

Global site tag (gtag.js) - Google Analytics