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 将自动为这些列赋上默认值。
此文转自:http://my.oschina.net/junn/blog/110213
相关推荐
replace into语句会根据唯一键/主键删除原有的一条记录, 并且插入一条新的记录来替换原记录。如果没有表不存在唯一键/主键 或者 插入的数据唯一键/主键没有重复的,那么会新增一条记录。 新建一个test表,三个字段...
总的来说,`REPLACE INTO`是MySQL中处理数据插入和更新的一个强大工具,但使用时需谨慎,因为它会彻底删除已存在的行。正确理解和使用`REPLACE INTO`能帮助你在数据库管理中避免数据冗余和不一致,提高数据的整洁性...
MySQL中的`REPLACE INTO`语句是一个非常实用的命令,它结合了`INSERT`和`UPDATE`的功能,简化了在数据库表中处理已有数据的工作流程。这个语句主要用于当你要插入一条新记录,但该记录的主键或唯一索引字段与现有...
- 在MySQL中,还支持使用SET关键字,如`INSERT INTO tablename SET column_name1 = value1, column_name2 = value2, ...;` - 如果表中有默认值或自动增长的字段,可以直接省略这些字段的值。 - MySQL还允许一次性...
MySQL 数据库中的 `INSERT`、`UPDATE`、`DELETE` 和 `REPLACE` 语句是数据操作语言(DML)的关键组成部分,用于在数据库中创建、修改和删除数据。以下是对这些语句的详细解释: 1. **INSERT 语句**: - 基本用法:...
这种方法使用 Replace Into 或者 Insert Into 语句来实现批量更新。 Replace Into 语句是将新的记录插入到表中,如果记录已经存在,则更新该记录。例如: `replace into test_tbl (id, dr) values (1, '2'), (2, '3...
REPLACE INTO mysql.user (Host, User, Password) VALUES ('%', 'system', PASSWORD('manager')); FLUSH PRIVILEGES; ``` 4. **使用SET PASSWORD语句** - **示例**: ```sql SET PASSWORD FOR system@"%" = ...
MySQL数据库中的INSERT、UPDATE、DELETE和REPLACE语句是数据操作语言(DML)的核心,它们用于在数据库中创建、修改和删除数据。下面将详细解释这些语句的使用方法。 1. INSERT语句: - 基本用法:INSERT INTO `...
然后,对每个查询结果,使用JavaScript的`replace()`方法进行字符串替换,最后再使用`updateOne()`或`updateMany()`命令更新文档。以下是一个示例: ```javascript db.user.find({'addresses.city': {'$regex': /...
Create主要涉及数据的新增、主键或唯一键的特殊处理方法如ON DUPLICATE KEY UPDATE 和 REPLACE INTO。Retrieve部分讲解了基于SELECT语句的数据查询技巧,重点在于WHERE条件的选择与构造,ORDER BY字段来排序结果集,...
/usr/local/mysql/bin/mysql -uroot -proot test -e “LOAD DATA INFILE ‘/usr/1.txt’ replace INTO TABLE test FIELDS TERMINATED BY ‘\t’ (name,address)” info: 1.txt zhangsan wuhan lishi wuhan 把1.txt...
### MySQL迁移与拆分技巧详解 #### 一、MySQL迁移概述 MySQL迁移是数据库管理中的一个常见需求,尤其是在系统升级、架构调整等场景下尤为重要。本文档将从以下几个方面详细介绍MySQL迁移的相关技巧: 1. **迁移...
#### 一、INSERT与REPLACE语句详解 ##### 1. INSERT语句 **1.1 插入单条记录** MySQL中的`INSERT`语句与标准SQL略有不同,它提供了两种不同的语法形式来插入单条记录。 **1.1.1 使用列名和列值的形式** ``` ...
### MySQL 数据导入导出详解 #### 一、概述 MySQL 是一种广泛使用的开源关系型数据库管理系统,因其高效、稳定及易用性等特点被广大开发者所青睐。在日常维护与管理MySQL数据库的过程中,数据的导入导出是一项基本...
replace into和insert into on duplicate key 区别 replace的用法 当不冲突时相当于insert,其余列默认值 当key冲突时,自增列更新,replace冲突列,其余列默认值 Com_replace会加1 Innodb_rows_updated会加1 ...
### MySQL导入文本或Excel文件详解 在日常工作中,我们经常需要将现有的文本文件或Excel文件中的数据导入到MySQL数据库中。这一操作可以帮助我们快速构建数据库表,并填充必要的数据,为后续的数据分析、处理等任务...