laravel 8 、thinkphp数据库锁机制
lockForUpdate() 在使用时,如果只需要阻止另外程序对其进行修改,可以只使用 1 个lockForUpdate();
当某个程序需要对其进行修改时,可以使用 lockForUpdate(),避免并发进行修改,
当其他程序也会需要对相同数据进行修改时,其他程序也需要使用 lockForUpdate() 进行锁机制,避免,获取到的数据是第一个程序未修改前的数据,如果当前程序未使用 lockForUpdate() 对其进行修改,当前程序获取到的数据是第一个程序未修改前的数据,然后在进行修改时,第二个程序会等第一个程序commit后再处理(即使未使用 lockForUpdate() 也会等到第一个锁机制结束才会执行修改,而不会阻止查询 (sharedLock 也是一样的效果)),这样有可能造成,第二个程序获取到的数据是未修改前的数据,造成数据错误,
避免多个程序同时执行修改同一个数据,造成数据错误,都要使用 lockForUpdate() 锁机制,数据才不会出错;(同时使用 lockForUpdate() 锁机制,会等待第一个修改完成后再进行查询,而不是先查询,等待结束再执行修改);
thinkphp 里面 的 lock(true) 也是同样的道理
原文地址:https://blog.csdn.net/qq_32166533/article/details/140633889
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!