一:乐观锁
在 laravel 中乐观锁大多是基于数据版本(Version)记录机制实现。何谓数据版本?即为数据减少一个版本标识,在基于数据库表的版本解决方案中,个别是通过为数据库表减少一个“version”字段来实现。
读取出数据时,将此版本号一起读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的以后版本信息进行比对,如果提交的数据版本号大于数据库表以后版本号,则予以更新,否则认为是过期数据。
二:乐观锁
在 laravel 中查问结构器蕴含一些能够帮忙你在 select 语法上实现「乐观锁定」的函数。若想在查问中实现一个「共享锁」,你能够应用 sharedLock 办法。共享锁可避免选中的数据列被篡改,直到事务被提交为止 :
DB::table('users')->where('votes', '>', 100)->sharedLock()->get();
下面这个查问等价于上面这条 SQL 语句:
select * from `users` where `votes` > '100' lock in share mode;
此外你还能够应用 lockForUpdate 办法。“for update”锁防止抉择行被其它共享锁批改或删除:
DB::table('users')->where('votes', '>', 100)->lockForUpdate()->get();
下面这个查问等价于上面这条 SQL 语句:
select * from `users` where `votes` > '100' for update;