这篇文章主要介绍了Laravel事务中使用悲观锁的示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
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 会用行级锁锁定所要修改的行,否则会使用表锁锁住整张表,因此在使用时一定要注意使用索引,否则会导致高的并发问题;
感谢你能够认真阅读完这篇文章,希望小编分享的“Laravel事务中使用悲观锁的示例”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。