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

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

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

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


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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 3

MySQL insert on update

6年前 评论

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

6年前 评论

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

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

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