ON DUPLICATE KEY UPDATE在mysql的INSERT语句中用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LGHunter/article/details/83146372

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

示例:

create table testtable(
	day date not null,
	slot tinyint unsigned not null,
	cnt int unsigned not null,
	primary key(day)
) engine = InnoDB;
testtable表的主键是由 day+slot 两个字段组成。

现有数据:
day slot cnt
2017-11-19 10 1
2017-11-20 20 0

1、

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

由于插入的数据中 day+slot 与现有的记录的唯一索引重复了,所以执行旧行的更新,将cnt字段的值变为cnt+1,执行之后,最终结果是这样的:
day slot cnt
2017-11-19 10 2
2017-11-20 20 0

2、

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

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

注意:先判断插入的值,主键是否重复。不重复,则INSERT;重复,则将ON DUPLICATE KEY UPDATE后面的赋值语句进行相应字段值的更新。

猜你喜欢

转载自blog.csdn.net/LGHunter/article/details/83146372