mysql insert or update多表关联插入 Or 更新

一、mysql的replace into语法

存在就先删除记录在插入更新,不存在直接插入

1、语法
	Mysql replace与replace into都是经常会用到的功能;
	replace其实是做了一次update操作,而不是先delete再insert;
	而replace into其实与insert into很像,但对于replace into,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除。
	
--建表create  
table t1(
id  bigint(10),
name varchar(16),
sale bigint(10),
operatime datetime,UNIQUE KEY `idx_id` (`id`) USING BTREE
);
create table t2(
id  bigint(10),
name varchar(16),
sale bigint(20),
UNIQUE KEY `idx_id` (`id`) USING BTREE
);

-- 插入数据
INSERT into t1 values(1,"xiaohong",1000,now());
INSERT into t1 values(2,"xiaoming",500,now());
INSERT into t2 values(1,"xiaohong",300);
INSERT into t2 values(2,"xiaoming",400);
INSERT into t2 values(3,"xiaoxiao",900);

--mysql replace into实现
replace into t1 select id,name,sale,now() from t2;

二、mysql的on duplicate key update语法

存在就更新,不存在就插入
mysql并没有oracle、mssql的merge into语法,但是有个on duplicate key update语法(不是标准的sql语法)可以实现merge into语法。ON DUPLICATE KEY UPDATE为Mysql特有语法,使用时应多注意主键和插入值是否是我们想要插入或修改的key、Value。

创建表,注意要有一个唯一索引 new_code_index, 插入或者更新时,以此为标准。另外在高并发环境下,禁用insert into …on duplicate key update…,因为会造成mysql主从不一致。

1、语法
--单条记录下使用
--假如t1表的主键或者UNIQUE 索引是a,如果数据库里面已经存在a=1的记录则更新这条记录的c字段的值为原来值+1,然后返回值为2。
--如果不存在则插入a=1,b=2,c=3到数据库,然后返回值为1。
INSERT INTO t1(a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1;
--多记录下使用INSERT 
INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6)  ON DUPLICATE KEY UPDATE c=VALUES(c);
2、实验
--建表
create  table t1(
id  bigint(10),
name varchar(16),
sale bigint(10),
operatime datetime,
UNIQUE KEY `idx_id` (`id`) USING BTREE
);
create table t2(
id  bigint(10),
name varchar(16),
sale bigint(20),
UNIQUE KEY `idx_id` (`id`) USING BTREE);

-- 插入数据
INSERT into t1 values(1,"xiaohong",1000,now());
INSERT into t1 values(2,"xiaoming",500,now());
INSERT into t2 values(1,"xiaohong",300);
INSERT into t2 values(2,"xiaoming",400);
INSERT into t2 values(3,"xiaoxiao",900);

--on duplicate key update实现
insert into t1 
select id,name,sale,now() from t2 
on duplicate key update sale= t1.sale + t2.sale

参考:https://blog.csdn.net/weixin_39774905/article/details/110585471

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值