MySQL--INSERT INTO ... ON DUPLICATE KEY UPDATE ...

转自:https://my.oschina.net/iceman/blog/53735

如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,

则在出现重复值的行执行UPDATE;

如果不会导致唯一值列重复的问题,则插入新行。

注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法! 
这个语法和适合用在需要判断记录是否存在,不存在则插入存在则更新的场景。

时间: 2024-10-07 16:36:07

MySQL--INSERT INTO ... ON DUPLICATE KEY UPDATE ...的相关文章

【转】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

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>

MySQL插入更新_ON DUPLICATE KEY UPDATE

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

MYSQL中的ON DUPLICATE KEY UPDATE

今天查看数据入库脚本时,看到使用的插入语句是: INSERT INTO tablename(field1,field2, field3, ...) VALUES(value1, value2, value3, ...) ON DUPLICATE KEY UPDATE field1=value1,field2=value2, field3=value3, ...; 自己第一次遇到,正好查询文档学习下. 使用这条语句的原因,是为了更好的执行插入和更新,因为我们再插入一条语句时,表中可能已经存在了这条

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

MySql避免重复插入记录方法(ignore,Replace,on duplicate key update,not exist)

在MySQL中进行条件插入数据时,可能会用到以下语句,现小结一下.我们先建一个简单的表来作为测试: CREATE TABLE `books` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(200) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `NewIndex1` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1.insert ignore int

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、REPLACE INTO

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