关于查询数据不存在则插入的问题
今天思考业务时,想到一个之前一直忽略的问题,一个很常见的业务场景:
查询某条数据是否存在,不存在则做一些其它的动作,然后插入这条数据。
请问这种场景下需要用到锁或事务吗?如果要用到锁,应该用到那种锁,应该锁行还是锁全表,以及在高并发场景下会存在问题吗?
另外请教另一个问题,大家工作中有被要求写SQL时不允许使用 left join
吗?今天听别人说不建议使用 left join
, 不知为何。
MySQL insert on update
left join 在没有关联关系的框架中用来便捷取数据,在laravel中很少用
不建议用多是因为难用索引/临时表/文件排序等问题,其实只要join都会有这些风险,如果满足需求且没有更好的方式替代,完全可以先用着,等必要等时候再优化
mysql自带的一个关键词 DUPLICATE 已经帮我们解决这个问题了,num是主键,如果不存在1001这个主键则插入,存在则更新