mysql中replace和insert的区别

起源

碰到这个问题是这样的,最近在做一个项目开发中碰到一种写法

$Db->table('tablename')->insert($data,true);

之前都是直接用的insert,不知道这个true有啥用

分析

查看了一下文档,这个参数支持insert和replace两种方法,而replace的主要特点如下:
圆善的学习园地-慎用MySQL replace语句
大概意思就是,replace可以检查插入数据时的主键冲突或唯一索引冲突,如果冲突的话就会对之前的数据进行更新。
但这里有一点小坑,也是项目中实际遇到的,replace into 的执行,是先delete然后再insert,会有两种问题:
1.会导致自增ID+1,如上文所说,如果有主从数据库会导致表自增ID不一致
2.如果$data中不包含全部的字段数据,replace之后,未指定的数据会变成默认值(这个很坑,甚至有可能改变ID)

解决

上文的最下面也给出了一些参考的解决方案,我觉得这个方法就很不错
ON DUPLICATE KEY UPDATE 用法与说明
不过感觉依然不是特别好用,实际项目中我可能还是会选择先check,再insert。
总之使用replace的时候还是要慎重仔细,不然可能导致数据丢失和数据错乱。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值