关于查询数据不存在则插入的问题

今天思考业务时,想到一个之前一直忽略的问题,一个很常见的业务场景:

查询某条数据是否存在,不存在则做一些其它的动作,然后插入这条数据。

请问这种场景下需要用到事务吗?如果要用到锁,应该用到那种锁,应该锁行还是锁全表,以及在高并发场景下会存在问题吗?


另外请教另一个问题,大家工作中有被要求写SQL时不允许使用 left join 吗?今天听别人说不建议使用 left join , 不知为何。

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 3

MySQL insert on update

5年前 评论

left join 在没有关联关系的框架中用来便捷取数据,在laravel中很少用
不建议用多是因为难用索引/临时表/文件排序等问题,其实只要join都会有这些风险,如果满足需求且没有更好的方式替代,完全可以先用着,等必要等时候再优化

5年前 评论

mysql自带的一个关键词 DUPLICATE 已经帮我们解决这个问题了,num是主键,如果不存在1001这个主键则插入,存在则更新

INSERT INTO table(num,name) VALUE('1001','小李') ON DUPLICATE KEY UPDATE name= '小李'
5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!