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与REPLACE INTO在操作过程上不同的是:

当已存在数据时,ON DUPLICATE KEY UPDATE执行更新操作,而不是先删除原有记录,再插入新记录。

语句:INSERT INTO table_name (field1,field2...) values (value1,value2...) on duplicate key update filed3=value3;

说明:update后面接的语句可以是其它表达式。

假设有一个以下table:

mysql> select * from staff_3;
+----+----------+-------+
| ID | name     | slary |
+----+----------+-------+
|  1 | liding   |  2700 |
|  2 | haofugui |  3500 |
|  3 | xiaoli   |  3600 |
|  4 | xiaohua  |  6000 |
+----+----------+-------+
4 rows in set (0.00 sec)

mysql> describe staff_3;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| ID    | int(11)  | NO   | PRI | NULL    | auto_increment |
| name  | char(10) | YES  | UNI | NULL    |                |
| slary | int(11)  | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

进行on duplicate key on命令:(从ID可以看出,该命令执行更新操作别浪费自增属性值)

mysql> insert into staff_3 (name,slary) values (‘xiaoli‘,4000) on duplicate key update slary=5000;
Query OK, 2 rows affected (0.00 sec)

mysql> select * from staff_3;
+----+----------+-------+
| ID | name     | slary |
+----+----------+-------+
|  1 | liding   |  2700 |
|  2 | haofugui |  3500 |
|  3 | xiaoli   |  5000 |
|  4 | xiaohua  |  6000 |
+----+----------+-------+
4 rows in set (0.00 sec)

mysql> insert into staff_3 (name,slary) values (‘xiaoming‘,4000) on duplicate key update slary=5000;
Query OK, 1 row affected (0.00 sec)

mysql> select * from staff_3;
+----+----------+-------+
| ID | name     | slary |
+----+----------+-------+
|  1 | liding   |  2700 |
|  2 | haofugui |  3500 |
|  3 | xiaoli   |  5000 |
|  4 | xiaohua  |  6000 |
|  5 | xiaoming |  4000 |
+----+----------+-------+
5 rows in set (0.00 sec)

原文地址:https://www.cnblogs.com/yy20141204bb/p/8400715.html

时间: 2024-11-07 01:11:40

MySQL插入更新_ON DUPLICATE KEY UPDATE的相关文章

MySQL_插入更新 ON DUPLICATE KEY UPDATE

平时我们在设计数据库表的时候总会设计 unique  或者 给表加上 primary key 的限制条件. 此时 插入数据的时候 ,经常会有这样的情况: 我们想向数据库插入一条记录: 若数据表中存在以相同主键的记录,我们就更新该条记录. 否则就插入一条新的记录. 逻辑上我们需要怎么写: $result = mysql_query('select * from xxx where id = 1');$row = mysql_fetch_assoc($result);if($row){mysql_q

[转]主键冲突的话就更新否则插入 (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

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, ...; 自己第一次遇到,正好查询文档学习下. 使用这条语句的原因,是为了更好的执行插入和更新,因为我们再插入一条语句时,表中可能已经存在了这条

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

MySQL ON DUPLICATE KEY UPDATE 语法

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

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重复插入时更新

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 插入更新在一条sql ON DUPLICATE KEY UPDATE

有时候需要进行数据操作的,如果有数据则更新数据, 没有数据则插入. 以往的做法是先查询,再根据查询结果进行判断,执行插入或更新操作 其实 有一种 ON DUPLICATE KEY UPDATE 语法, 可以在一条sql里完成上述逻辑操作. INSERT INTO tbPrize(sOpenid,iAreaId,iPlatId,SSSgroupOne,SSSgroupTwo,SSgroupOne,SSgroupTwo,SgroupOne,SgroupTwo,dtFound) VALUES ('2A

MySql避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)

本文章来给大家提供三种在mysql中避免重复插入记录方法,主要是讲到了ignore,Replace,ON DUPLICATE KEY UPDATE三种方法,各位同学可尝试参考. 案一:使用ignore关键字 如果是用主键primary或者唯一索引unique区分了记录的唯一性,避免重复插入记录可以使用:  代码如下 复制代码 1 INSERT IGNORE INTO `table_name` (`email`, `phone`, `user_id`) VALUES ('[email protec