`
A牛哥哥
  • 浏览: 150610 次
社区版块
存档分类
最新评论

mysql 插入或更新ON DUPLICATE KEY UPDATE

 
阅读更多
CREATE TABLE `zzz` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `names` varchar(10) CHARACTER SET utf8 DEFAULT NULL,
  `kecheng` varchar(80) CHARACTER SET utf8mb4 NOT NULL COMMENT '课程',
  `score` int(11) DEFAULT NULL COMMENT '分数',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx` (`names`,`kecheng`)
) ENGINE=InnoDB;

insert into `zzz` (`id`, `names`, `kecheng`, `score`) values('1','a','语文','80');
insert into `zzz` (`id`, `names`, `kecheng`, `score`) values('2','b','语文','85');
insert into `zzz` (`id`, `names`, `kecheng`, `score`) values('3','a','数学','90');
insert into `zzz` (`id`, `names`, `kecheng`, `score`) values('4','b','数学','77');
insert into `zzz` (`id`, `names`, `kecheng`, `score`) values('5','a','英语','80');
insert into `zzz` (`id`, `names`, `kecheng`, `score`) values('6','b','英语','88');


names 和 kecheng 已经建立了unique索引, 所以当重复插入names和kecheng同时重复的记录时会报错, 这时希望更新score, 可以这样写:
insert into zzz(names,kecheng,score) values('a','语文',10) on duplicate key update score=90;

1 queries executed, 1 success, 0 errors, 0 warnings

查询:insert into zzz(names,kecheng,score) values('a','语文',10) on duplicate key update score=90

共 2 行受到影响

执行耗时   : 0.056 sec
传送时间   : 0 sec
总耗时      : 0.056 sec


2行受到影响, 先尝试插入,插入不成功然后删除掉不成功的数据, 再执行修改,相当于一条删除,一条更新, 因此2行受影响.
何以见得?
可以接着试验,之前主键id已经增长到6, 执行这条sql后, 再执行正常的插入(非重复数据), 发现id是8而不是7, 说明7已经被使用过了,只不过7那条数据插入不成功被删除掉了.


如果有重复数据,但是不想更新任何字段呢?
比如重复数据直接忽略,不更新score字段,可以这样:
INSERT INTO zzz(NAMES,kecheng,score) VALUES('a','语文',10) ON DUPLICATE KEY UPDATE score=score;

1 queries executed, 1 success, 0 errors, 0 warnings

查询:insert into zzz(names,kecheng,score) values('a','语文',10) on duplicate key update score=score

共 0 行受到影响

执行耗时   : 0.049 sec
传送时间   : 0 sec
总耗时      : 0.049 sec

受影响0行, 说明没有任何改动


如果有重复数据,想更新多个字段呢?
INSERT INTO zzz(NAMES,kecheng,score) VALUES('a','语文',10) ON DUPLICATE KEY UPDATE score=score,kecheng=kecheng;

1 queries executed, 1 success, 0 errors, 0 warnings

查询:insert into zzz(names,kecheng,score) values('a','语文',10) on duplicate key update score=score

共 0 行受到影响

执行耗时   : 0.049 sec
传送时间   : 0 sec
总耗时      : 0.049 sec

分享到:
评论

相关推荐

    [mysql]mysql通过on duplicate key update实现批量插入或更新(csdn)————程.pdf

    在MySQL数据库中,`ON DUPLICATE KEY UPDATE` 是一个非常实用的特性,它允许你在执行INSERT语句时,如果插入的数据违反了唯一性约束(即存在相同的唯一索引),则自动执行UPDATE操作来更新已有记录。这个功能在处理...

    mysql数据库Insert语句后面加ON DUPLICATE KEY UPDATE,保证唯一性1

    当你在`INSERT`语句后添加`ON DUPLICATE KEY UPDATE`,如果新插入的行违反了唯一性约束,MySQL将执行指定的`UPDATE`操作。这里的“唯一性”指的是任何具有唯一索引或主键的列。例如,如果你有一个名为`consume_locus...

    Mysql中Insert into xxx on duplicate key update问题

    ON DUPLICATE KEY UPDATE` 是一个非常实用的特性,它允许你在尝试插入新记录时,如果插入的数据违反了唯一性约束(如UNIQUE索引或PRIMARY KEY),则自动更新已经存在的匹配行,而不是抛出错误。这个特性是MySQL特有...

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

    mysql “ON DUPLICATE KEY UPDATE” 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列...

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

    - 示例中,当再次尝试`INSERT`一个`a=3`的记录时,由于`b`字段在`ON DUPLICATE KEY UPDATE`部分被指定更新为'r5',所以原有记录的`b`字段被更新,而`c`字段保持不变。 - 对于`AUTO_INCREMENT`字段,`INSERT INTO ....

    mysql ON DUPLICATE KEY UPDATE语句示例

    在MySQL数据库中,`ON DUPLICATE KEY UPDATE` 是一个非常实用的特性,它允许你在插入新数据时,如果遇到重复的唯一键值,自动执行更新操作,而不是抛出错误。这个功能大大简化了数据处理的流程,特别是当你需要在一...

    MYSQL的REPLACE和ON DUPLICATE KEY UPDATE语句介绍解决问题实例

    需要注意的是,`ON DUPLICATE KEY UPDATE`对于有多个唯一索引的表可能变得复杂,因为可能有多条记录匹配相同的更新条件。在这种情况下,应谨慎设计更新逻辑,避免不期望的更新行为。 总的来说,`REPLACE`和`INSERT ...

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

    MySQL的`ON DUPLICATE KEY UPDATE`语法是一种特殊的数据插入机制,它允许你在尝试插入新记录时,如果遇到唯一约束冲突(比如主键或唯一索引的值已经存在),则自动更新已有记录。这个特性在处理数据导入、同步或批量...

    mysql如何实现 如果存在就update更新,不存在再insert插入.zip

    在MySQL数据库中,如果你需要执行一个操作,即当数据存在时进行更新,如果不存在则进行插入,你可以使用`INSERT INTO...ON DUPLICATE KEY UPDATE`语句。这个功能强大的语句结合了`INSERT`和`UPDATE`操作,允许你在...

    mysql 中 replace into 与 insert into on duplicate key update 的用法和不同点实例分析

    在MySQL中,`REPLACE INTO` 和 `INSERT INTO ON DUPLICATE KEY UPDATE` 是两种处理数据插入时冲突的方法,主要用于处理当试图插入一条记录,而该记录的唯一键或主键已经在表中存在的情况。这两种方法都可以实现如果...

    Mysql ON DUPLICATE KEY Update

    总结来说,`ON DUPLICATE KEY UPDATE`是MySQL提供的一种高效、灵活的方式来处理可能存在的重复数据问题,避免了因插入重复记录而引发的错误,同时也提供了更新现有数据的便利。在设计数据库时,合理地设置唯一索引,...

    MySQL中如何处理重复数据(Duplicate)?

    ON DUPLICATE KEY UPDATE 语句或 REPLACE INTO 语句。下面是这两种方法的详细解释: 一、INSERT INTO ... ON DUPLICATE KEY UPDATE 语句 INSERT INTO ... ON DUPLICATE KEY UPDATE 语句是在 MySQL 中处理重复数据...

    mysql 批量更新及效率对比

    MySQL 批量更新的高效方法 MySQL 批量更新是指在 MySQL 数据库中批量更新多... On Duplicate Key Update 语句可以大大提高更新效率,而使用临时表的方法也可以提高效率,但是需要用户有 temporary 表的 create 权限。

    INSERT INTO .. ON DUPLICATE KEY更新多行记录

    ON DUPLICATE KEY UPDATE` 是 MySQL 数据库中的一种高效操作,它结合了插入新记录和更新已有记录的功能。这个语句主要用于处理唯一性约束冲突,如 PRIMARY KEY 或 UNIQUE 索引的情况。当试图插入的记录与现有记录在...

    MySQL中实现插入或更新操作(类似Oracle的merge语句)

    INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE KEY UPDATE columnA=IF(columnB>0,1,columnA) 更新多个字段: INSERT INTO tbl (columnA,columnB,columnC) VALUES (1,2,3) ON DUPLICATE ...

    insert into … on duplicate key update / replace into 多行数据介绍

    ON DUPLICATE KEY UPDATE` 和 `REPLACE INTO` 是MySQL中处理批量插入并更新已有数据的两种有效策略,它们提供了在保持数据完整性和性能之间平衡的解决方案。根据具体业务需求和数据约束,选择合适的方法来优化数据...

Global site tag (gtag.js) - Google Analytics