MySQL的INSERT···ONDUPLICATEKEYUPDATE使⽤的⼏种
情况
在MySQL数据库中,如果在insert语句后⾯带上ON DUPLICATE KEY UPDATE ⼦句,⽽要插⼊的⾏与表中现有记录的惟⼀索引或主键中产⽣重复值,那么就会发⽣旧⾏的更新;如果插⼊的⾏数据与现有表中记录的唯⼀索引或者主键不重复,则执⾏新纪录插⼊操作。另
insert语句字段顺序外,ON DUPLICATE KEY UPDATE不能写where条件。
⽰例:
create table kid_score(
id tinyint unsigned not null,
birth_day date not null,
score int unsigned not null,
primary key(id, birth_day) --唯⼀索引是由 id + birth_day 两个字段组成
) engine = InnoDB;
--初始化数据
insert into kid_score(id, birth_day, score) values (1,'2019-01-15',10),(2,'2019-01-16',20);
下⾯开始验证执⾏INSERT ··· ON DUPLICATE KEY UPDATE语法的规则:如果你插⼊的记录导致⼀个UNIQUE索引或者primary key(主键)出现重复,那么就会认为该条记录存在,则执⾏update语句⽽不是insert语句,反之,则执⾏insert语句⽽不是更新语句。
1. 唯⼀索引重复
insert into kid_score(id, birth_day, score) values (1,'2019-01-15',30) ON DUPLICATE KEY UPDATE score = score + 50;
结果:
2. 唯⼀索引不重复
insert into kid_score(id, birth_day, score) values (2,'2019-01-15',30) ON DUPLICATE KEY UPDATE score = score + 50;
结果:
3. 唯⼀索引重复,插⼊完全相同数据
insert into kid_score(id, birth_day, score) values (2,'2019-01-16',20) ON DUPLICATE KEY UPDATE score = 20;
结果:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论