MySQL有哪些实现方式?何为插入,何为更新?

需求背景

环境

MySQL 版本: 5.7.20-log

开发规范

公司后端开发规范有这么一点:

更新数据库表中数据的时候,不允许先删,然后批量插入

需要将参与表中数据比判断,找出哪些是新插入,哪些需要更新,哪些是删除的,然后再做对应的数据操作

需求

我们有 表 如下:

当商品配送完后之后,需要记录它的最新配送价,若商品最新配送价已经存在则进行更新,不存在则执行插入

针对这个需求,我们有哪些实现方式?

代码处理

按开发规范中说的处理

通过代码在内存中进行数据处理,找出插入列表与更新列表,然后执行数据库操作

因为是很常规的插入与更新操作,所以这种处理方式适用于所有的关系型数据库

REPLACE INTO

当数据库是 MySQL ,碰到 不存在则插入,存在则更新 的需求时,第一时间往往想到的是REPLACE INTO

工作原理

replace into 跟 insert 功能类似

不同点在于: replace into 首先尝试插入数据到表中,如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据,否则直接插入新数据

replace 语句会返回一个数,表示受影响的行的数目,该数是被删除和被插入的行数的和

我们来看个示例

对于示例结果,相信大家都能理解

需要强调的是:根据唯一索引 uk_comany_ware 判定 (1001,10001,19.8,1,1) 已经存在,那么先删除此记录,然后插入 (100

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值