Mysql插入数据,如果存在此数据,那么就更新这条数据,否则插入数据。

使用 on duplicate key update。

准备工作

建表

create table user_info(
	id int auto_increment primary key,
	name varchar(20),
	user_code varchar(20) unique not null,
	age int 
);

建立了一个表,这个表有主键(id),有唯一键(user_code)。

插入数据

insert into user_info(name,user_code,age) values('king','u_001',22);
insert into user_info(name,user_code,age) values('king2','u_002',24);
insert into user_info(name,user_code,age) values('king3','u_003',25);

主键更新

利用主键(id)匹配是否有数据插入更新。

INSERT into user_info(id,name,user_code) values(1,'Tom','i_001') on DUPLICATE key  UPDATE  id=1,name='Tom2',user_code='t_001';

INSERT into user_info(id,name,user_code) values(1,'Tom','i_001') on DUPLICATE key  UPDATE name='Tom2',user_code='t_001';

# 这两种都可以更新同一条数据。

此处根据id=1判断,如果存在id=1的数据,那么就不insert,而是执行update。

如果是依据主键更新,那么唯一键有可以被更新

在这里插入图片描述
执行后发现是影响了两条数据。

再查看下数据,发现id=1的数据被更新了,并没有新插入一条数据,连user_code也更新了。
在这里插入图片描述

根据唯一键更新

不传入id,而根据user_code这个唯一键判断是否是匹配的数据,来进行更新。

INSERT into user_info(name,user_code) values('Tom01','t_001') on DUPLICATE key  UPDATE  name='Tom001',user_code='t_0001';

在这里插入图片描述
插入是判断user_code=t_001,发现表里面已经有此条数据,那么就执行更新语句,发现唯一键也被更新了。
在这里插入图片描述

执行插入

INSERT into user_info(name,user_code) values('Tom01','t_002') on DUPLICATE key  UPDATE  name='Tom001',user_code='t_0001';

在这里插入图片描述
在这里插入图片描述
此处执行了插入数据,因为根据user_code=t_002发现数据库并没有这条数据,那么执行insert。

注意项

如果没有id,也不根据唯一键user_code,那么就只会执行插入,而不会有更新。

INSERT into user_info(name,age) values('Tom',22) on DUPLICATE key  UPDATE name='Tom2',age = 23;

更新时影响条数,为1.
在这里插入图片描述

操作影响条数
插入(insert)1
更新(update)1
on duplicate key update (插入)1
on duplicate key update (更新)2

那么可以想象一下,插入并更新应该是做了delete操作,然后insert新数据,当然这仅仅是猜测。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐