laravel 提供了方便快捷的数据库事务使用方式,在使用中遇到过几个容易混淆和被误导的地方,这里做个记录,希望哪里写的不对的地方各位大神指点一下

laravel 事务分为手动方式和自动方式。

但如果我们在使用 laravel 提供的 sharedLock 或者 lockForUpdate 锁表的方式,为了避免不必要的麻烦和错误,建议最好使用手动提交事务来处理,如下图:

下面来说说 sharedLock (共享锁) 和 lockForUpdate (悲观锁) 这两个在使用上的区别和影响

sharedLock (共享锁)

sharedLock 使用时等同于 SQL 语句

select from transaction_test where type = 1 lock in share mode;

在事务中使用 sharedLock 时才会生效,会把数据所在行进行锁定,此时被锁定的数据,不允许被其他操作修改,但是被锁定的数据,对查询操作没有影响,无论是普通查询还是事务中的查询操作,都不会受到影响。

被锁定的数据,知道事务被提交或者回滚之后,才会释放.

lockForUpdate (悲观锁)

lockForUpdate 使用时等同于 SQL 语句 select from transaction_test where type = 1 for update;

lockForUpdate 只有在事务中才会生效,使用 lockForUpdate 时数据所在行被锁定,此刻其他事务中的锁表操作会等待当前事务提交才会执行,但是对于非锁表和普通的查询操作并没有限制,有影响的只是你在事务中同样执行的锁表操作.

总之,无论是共享锁还是悲观锁,受影响的只是事务中执行锁表的操作,对于普通的查询操作,和事务中的非锁表操作没有影响;

同时需要注意的是,无论悲观锁还是共享锁当 sql 语句涉及到索引 , 并用索引作为查询或判断的依据时;mysql 会用行级锁锁定所要修改的行,否则会使用表锁锁住整张表,因此在使用时一定要注意使用索引,否则会导致高的并发问题。

链接:https://www.php.cn/phpkj/laravel/436036.html

最新文章

  1. 注解的方式搭建springmvc步骤
  2. 对病毒Virus.Win32.Ramnit.B的研究
  3. js让程序暂停一段时间再执行
  4. Eclipse web项目引用其它项目时的部署问题
  5. Android 中的缓存机制与实现
  6. Xcode 杂七杂八
  7. HDU(1572),最短路,DFS
  8. Tensorflow ——神经网络
  9. Android 线程与消息 机制 15问15答
  10. dump_stack的简单使用 +CALL TREE
  11. 服务 远程服务 AIDL 进程间通讯 IPC 深化
  12. AMDU恢复ASM磁盘组数据(測)
  13. bootstrapValidator 使用(包含入门demo,常用方法,以及常用的规则)
  14. 201521123012 《Java程序设计》第三周学习总结
  15. 二值化神经网络(BNN)基础学习(一)
  16. idea搭建springboot
  17. M1 卡技术规范
  18. 如何查看Chrome浏览器保存的账号密码
  19. yum安装nginx 加载image_filter 加载方式
  20. 用HTML5播放IPCamera视频

热门文章

  1. python2和python3的编码encode解码decode函数
  2. tmux使用——2019年11月20日16:40:15
  3. find命令进阶(二):对找到的文件执行操作exec
  4. 每天一个linux命令:less(14)
  5. Git 中的一些其他常用命令
  6. 【靶场练习_sqli-labs】SQLi-LABS Page-1(Basic Challenges)
  7. Unity编程标准导引-1.1下载和安装Unity
  8. NOIp 图论算法专题总结 (2)
  9. JDK1.8 动态代理机制及源码解析
  10. python中常犯错误之字符串列表下标问题