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)————程
代码如下: insert into table(a, b, c) values (1, 2, 3) on duplicate key update c = c + 1;1 update table set c = c + 1 where a = 1; 另外值得一提的是,这个语句知识mysql中,而标准sql语句中是没有的。 ...
mysql数据库Insert语句后加ONDUPLICATE KEY UPDATE,保证唯性如果在INSERT语句末尾指定了ON DUPLICATE KEY UP
mysql “ON DUPLICATE KEY UPDATE” 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列...
今天听同事介绍oracle到mysql的数据migration,他用了Insert into ..... on duplicate key update ...,我当时就想怎么不用Replace呢,于是回来就仔细查了下,它们果然还是有区别的
本文介绍一下关于mysql中INSERT INTO… ON DUPLICATE KEY UPDATE用法
在对看看的后台进行排序的时候,遇到了一个像这样的需求,在电影表中有ID(主键自增)和orderby(排序字段) ,假设有十条数据id分别从1-10之间,对应的...下面来看看Mysql的REPLACE和INSERT … ON DUPLICATE KEY UPDATE REP
本篇文章是对mysql "ON DUPLICATE KEY UPDATE"语法进行了详细的分析介绍,需要的朋友参考下
深入理解和优雅使用ON DUPLICATE KEY Update 解决存在则更新,不存在则新增的问题 先看语法INSERT INTO table(id,a,……) values(1,‘xh’,……) ON DUPLICATE KEY Update a=‘value’,……; 举个例子 1,先创建表...
主要介绍了mysql 中 replace into 与 insert into on duplicate key update 的用法和不同点,结合实例形式分析了replace into 与 insert into on duplicate key update的功能、基本用法与操作注意事项,需要的朋友可以...
在之前面对这样的问题的时候,我们知道,MySQL提供了ON DUPLICATE KEY UPDATE或者REPLACE INTO来解决。 使用ON DUPLICATE KEY UPDATE 插入数据之前,表中就一条记录,如下图 SQL语句如下,当插入记录时候,与表中...
INSERT语法 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,…)] VALUES ({expr | DEFAULT},…),(…),… [ ON DUPLICATE KEY UPDATE col_name=expr, … ] 或: INSERT [LOW_...
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 ...
id, auto_name) values (1, ‘yourname’) ON DUPLICATE KEY UPDATE auto_name=’yourname’ON DUPLICATE KEY UPDATE的使用 如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY...
前言 在我们往数据库插入数据的时候,需要判断某个字段是否存在,如果存在则执行更新操作,如果不存在则...INSERT INTO table (id, user_id, token) VALUES (NULL, '2479031', '232') ON DUPLICATE KEY UPDATE user_i