MySQL "ON DUPLICATE KEY UPDATE" 使用

一、insert or update需求

需求:如果test_table中存在记录则update,不存在则insert。

二、老做法:3条sql

select * from test_table where id = 1;   //查询表中是否已有记录
insert into test_table (id,name) values(1,‘may‘);   //记录不存在,执行insert
update test_table set name = ‘may‘ where id = 1;  //记录存在,执行update

先查询一次,判断记录是否存在;如果不存在,则插入记录;如果存在,则更新记录。在数据量不大的情况下,不存在效率问题,可用。

但是,数据量一旦很大,效率则会很低,且会出现数据并发的问题,例如:数据重复,甚至跑到内存溢出。等等。而使用 “on duplicate key update"在数据量大的情况下,效率明显高很多。只有一个sql,直接在数据库层做处理,少了很多在业务层的判断。

三、使用 on duplicate key update:1条sql

使用 on duplicate key update,1条sql可以搞定上面3条sql所做的事情,且效率更高。

insert into test_table (id,name) values(1,‘may‘) 
on duplicate key update name = values(name);

【需要注意的是:以上on duplicate key update 中的sql需要id为主键,且表中设置主键值自动增长】

时间: 2024-10-07 03:50:22

MySQL "ON DUPLICATE KEY UPDATE" 使用的相关文章

MySQL: ON DUPLICATE KEY UPDATE 用法

使用该语法可在插入记录的时候先判断记录是否存在,如果不存在则插入,否则更新,很方便,无需执行两条SQL 这个语句知识mysql中,而标准sql语句中是没有的. INSERT INTO .. ON DUPLICATE KEY更新多行记录 如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE:如果不会导致唯一值列重复的问题,则插入新行.例如,如果列a被定义为UNIQUE,并

深入mysql "ON DUPLICATE KEY UPDATE" 语法的分析

mysql "ON DUPLICATE KEY UPDATE" 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE:如果不会导致唯一值列重复的问题,则插入新行. 例如,如果列 a 为 主键 或 拥有UNIQUE索引,并且包含值1,则以下两个语句具有相同的效果: 复制代码代码如下: INSERT INTO TABLE (a,c) VALUES

mysql ON DUPLICATE KEY UPDATE ;

需求: 1)如果admin表中没有数据, 插入一条 2)如果admin表中有数据, 不插入. 一般做法: 1 if($result = mysql_query("select * from admin")) 2 { 3 if(mysql_num_rows($result)) 4 { 5 echo "<br/>admin表中已经有数据了"; 6 } 7 else 8 { 9 $sql = " insert into admin (`adminNa

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

MySQL ON DUPLICATE KEY UPDATE 语法

一.前言 在日常业务开发中经常有这样一个场景,首先创建一条记录,然后插入到数据库,如果数据库已经存在同一主键的记录,执行update操作:否则,执行insert操作.这个操作可以在业务层做,也可以在数据库层面做.业务层一般做法是先查询,如果不存在就插入,如果存在就更新:但是查询和插入不是原子性操作,在并发量比较高的时候,可能两个线程都查询不到某个记录,所以会执行两次插入,其中一条必然会因为唯一性约束冲突而失败.数据库层mysql中INSERT ... ON DUPLICATE KEY UPDAT

my -&gt; mysql on duplicate key update使用总结

CREATE TABLE `t_duplicate` ( `a` int(11) NOT NULL, `b` int(255) DEFAULT NULL, `c` int(255) DEFAULT NULL, PRIMARY KEY (`a`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='测试验证on duplicate key update 功能'; SELECT * FROM `t_duplicate`; #添加和更新

on duplicate key update

mysql "ON DUPLICATE KEY UPDATE" 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE:如果不会导致唯一值列重复的问题,则插入新行. 例如,如果列 a 为 主键 或 拥有UNIQUE索引,并且包含值1,则以下两个语句具有相同的效果: 代码如下: INSERT INTO TABLE (a,c) VALUES (1,3

[转]主键冲突的话就更新否则插入 (ON DUPLICATE KEY UPDATE )

mysql "ON DUPLICATE KEY UPDATE" 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE:如果不会导致唯一值列重复的问题,则插入新行. 例如,如果列 a 为 主键 或 拥有UNIQUE索引,并且包含值1,则以下两个语句具有相同的效果: INSERT INTO TABLE (a,c) VALUES (1,3) ON D