insert into ... on duplicate key update 与 replace 区别

on duplicate key update:针对主健与唯一健,当插入值中的主健值与表中的主健值,若相同的主健值,就更新on duplicate key update 后面的指定的字段值,若没有相同主健值,就插入该记录

mysql> create table tab_test(fd1 int NOT NULL,fd2  varchar(50),primary key(fd1))engine=innodb;
Query OK, 0 rows affected (0.22 sec)

mysql> insert into tab_test(fd1,fd2) values(1,"matt");
Query OK, 1 row affected (0.16 sec)

mysql> insert into tab_test(fd1,fd2) values(2,"toto");
Query OK, 1 row affected (0.17 sec)

mysql> insert into tab_test values(3,"toto2");
Query OK, 1 row affected (0.17 sec)

mysql> insert into tab_test values(3,"toto2") on duplicate key update fd2="test";
Query OK, 2 rows affected (0.17 sec)

mysql> select * from tab_test;
+-----+------+
| fd1 | fd2  |
+-----+------+
|   1 | matt |
|   2 | toto |
|   3 | test |
+-----+------+
3 rows in set (0.00 sec)

mysql> insert into tab_test values(5,"toto2") on duplicate key update fd2="test1";
Query OK, 1 row affected (0.17 sec)

mysql> select * from tab_test;
+-----+-------+
| fd1 | fd2   |
+-----+-------+
|   1 | matt  |
|   2 | toto  |
|   3 | test  |
|   5 | toto2 |
+-----+-------+
4 rows in set (0.00 sec)

replace :

针对主健与唯一健,当插入值中的主健值与表中的主健值,若相同的主健值,删除该记录,再插入值,若没有相同主健值,就插入该记录

mysql> replace tab_test set fd1=1,fd2="Matt";
Query OK, 2 rows affected (0.17 sec)

mysql> select * from tab_test;
+-----+-------+
| fd1 | fd2   |
+-----+-------+
|   1 | Matt  |
|   2 | toto  |
|   3 | test  |
|   5 | toto2 |
+-----+-------+
4 rows in set (0.00 sec)

mysql> replace tab_test set fd1=1,fd2="xx";
Query OK, 2 rows affected (0.17 sec)

mysql> select * from tab_test;
+-----+-------+
| fd1 | fd2   |
+-----+-------+
|   1 | xx    |
|   2 | toto  |
|   3 | test  |
|   5 | toto2 |
+-----+-------+
4 rows in set (0.00 sec)
时间: 2024-08-15 03:01:29

insert into ... on duplicate key update 与 replace 区别的相关文章

mysql ON DUPLICATE KEY UPDATE、REPLACE INTO

INSERT INTO ON DUPLICATE KEY UPDATE 与 REPLACE INTO,两个命令可以处理重复键值问题,在实际上它之间有什么区别呢?前提条件是这个表必须有一个唯一索引或主键. 1.REPLACE发现重复的先删除再插入,如果记录有多个字段,在插入的时候如果有的字段没有赋值,那么新插入的记录这些字段为空.2.INSERT发现重复的是更新操作.在原有记录基础上,更新指定字段内容,其它字段内容保留. 这样REPLACE的操作成本要大于 insert  ON DUPLICATE

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

原文链接:http://www.jb51.net/article/47090.htm 今天听同事介绍oracle到mysql的数据migration,他用了Insert into ..... on duplicate key update ...,我当时就想怎么不用Replace呢,于是回来就仔细查了下,它们果然还是有区别的 看下面的例子吧: 1 Replace into ... 1.1 录入原始数据 mysql> use test; Database changed mysql>  mysq

INSERT 中ON DUPLICATE KEY UPDATE的使用

使用场景,在做全国各省ip访问统计时要将sparkStreaming的数据存在mysql中,按照一般设计,id,province,counts,time,这样就需要每次清空表,但是如果多分区的话就存在删除表的时候回出现后一个分区可能把前一个分区的数据删除掉,当然最好的办法是每次都只更新而不删除,但是如果通过代码实现比较复杂. 此时我们需要的就是如果存在则更新,如果不存在则新增. 用redis的kv就可以很容易的实现.在MySQL中也有这样的功能.INSERT 中ON DUPLICATE KEY

mysql:on duplicate key update与replace into

在往表里面插入数据的时候,经常需要:a.先判断数据是否存在于库里面:b.不存在则插入:c.存在则更新 一.replace into 前提:数据库里面必须有主键或唯一索引,不然replace into 会直接插入新数据,导致数据表里面有重复数据 执行时先尝试插入数据: a.当数据表里面存在(通过主键或唯一索引来判断)该数据,则先将表里的数据删除,再插入新的数据 b.如果数据表里面不存在该数据,则直接插入数据 replace into是insert into的增强版,语法跟insert iton差不

INSERT into ... on duplicate key update ...

INSERT  into exception_report_total ( waitFillOrders ,waitSendOrders ,changeOrders ,changeTotal ,waitProduceOrders ,wmsStockOrders ,erpStockOrders ,waitReserveOrders ,waitDispatchOrders ,addDispatchOrders ,waitCancel ,sendExceptions ,reserveOrders ,c

INSERT ... ON DUPLICATE KEY UPDATE Syntax

If you specify ON DUPLICATE KEY UPDATE, and a row is inserted that would cause a duplicate value in a UNIQUE index or PRIMARY KEY, MySQL performs an UPDATE of the old row. For example, if column a is declared as UNIQUE and contains the value 1, the f

mysql ON DUPLICATE KEY UPDATE重复插入时更新

mysql当插入重复时更新的方法: 第一种方法: 示例一:插入多条记录 假设有一个主键为 client_id 的 clients 表,可以使用下面的语句: INSERT INTO clients (client_id,client_name,client_type) SELECT supplier_id,supplier_name,'advertising' FROM suppliers WHERE not exists(select * from clients where clients.c

MySQL插入更新_ON DUPLICATE KEY UPDATE

前提:操作的表具有主键或唯一索引 INSERT INTO:表中不存在对应的记录,则插入:若存在对应的记录,则报错: INSERT INTO IGNORE:表中不存在对应的记录,则插入:若存在对应的记录,则忽略,不进行任何操作 REPLACE INTO:表中不存在对应的记录,则插入:若存在对应的记录,则删除原有的记录,再 插入新的记录. ON DUPLICATE KEY UPDATE(on duplicate key update)的功能类似于REPLACE INTO: 若表中不存在数据(没有待插

on duplicate key update之多列唯一索引

mysql处理存在则更新,不存在则插入(多列唯一索引) mysql处理存在则更新,不存在则插入(多列唯一索引) mysql处理某个唯一索引时存在则更新,不存在则插入的情况应该是很常见的,网上也有很多类似的文章,我今天就讲讲当这个唯一的索引是多列唯一索引时可能会遇到的问题和方法. 方法一: 使用 ? 1 INSERT INTO ON ... DUPLICATE KEY UPDATE ... : 表的创建如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 [sql] CREATE TA