MySQL的ON DUPLICATE KEY UPDATE用法

 在MySQL数据库中,如果在insert语句后面带上ON DUPLICATE KEY UPDATE 子句,而要插入的行与表中现有记录的惟一索引或主键中产生重复值,那么就会发生旧行的更新;如果插入的行数据与现有表中记录的唯一索引或者主键不重复,则执行新纪录插入操作。

        比如有这样一张表:

create table daily_hit_counter (

day date not null,

slot tinyint unsigned not null,

cnt int unsigned not null,

primary key(day, slot)

) engine = InnoDB;

daily_hit_counter 表的惟一索引是由 day+slot 两个字段组成。

现有数据:

day    slot    cnt
2017-11-19    1    10
2017-11-20    2    10

1. 执行:

insert into daily_hit_counter (day, slot, cnt) values ('2017-11-19', 1, 1) ON DUPLICATE KEY UPDATE cnt = cnt + 1;

由于插入的数据中 day+slot 与现有的记录的唯一索引重复了,所以执行旧行的更新,执行之后,最终结果是这样的:

day    slot    cnt
2017-11-19    1    11
2017-11-20    2    10

2. 执行:

insert into daily_hit_counter (day, slot, cnt) values ('2017-11-19', 2, 1) ON DUPLICATE KEY UPDATE cnt = cnt + 1;

由于插入的数据中 day+slot 与现有的记录的唯一索引或者主键都没有重复了,所以执行新纪录插入,执行之后,最终结果是这样的:

day    slot    cnt
2017-11-19    1    11
2017-11-19    2    1
2017-11-20    2    10

--------------------- 
作者:plg17 
来源:CSDN 
原文:https://blog.csdn.net/plg17/article/details/78583692 
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

VALUES修改
那么问题又来了,有人会说我ON DUPLICATE KEY UPDATE 后面跟的是固定的值,如果我想要分别给不同的记录插入不同的值怎么办呢?

INSERT INTO user_admin_t (_id,password) 
VALUES 
('1','多条插入1') ,
('UpId','多条插入2')
ON DUPLICATE KEY UPDATE 
password =  VALUES(password);
--------------------- 
作者:TransientBa 
来源:CSDN 
原文:https://blog.csdn.net/zyb2017/article/details/78449910 
版权声明:本文为博主原创文章,转载请附上博文链接!

注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值