網(wǎng)站開發(fā)和程序開發(fā)的卻別網(wǎng)絡(luò)營銷推廣8種方法
lockForUpdate 是悲觀鎖,測試就不寫了
注意的事項(xiàng)
- lockForUpdate 必須在事務(wù)中
- lockForUpdate 被阻塞的查詢必須是同樣添加了lockForUpdate的語句
- 查詢語句走索引,則使用行鎖,否則使用表鎖
現(xiàn)在舉例說明第一項(xiàng)和第二項(xiàng)
開啟事務(wù)并添加鎖
public function test1(){DB::beginTransaction();try {$user = GameUser::lockForUpdate()->where('name', "李濤")->first();sleep(10);DB::commit();echo "over!";} catch (\Exception $e) {DB::rollBack();}}
下面不鎖定數(shù)據(jù)的情況
// 不加lockForUpdate,不鎖定
GameUser::where('id', 1)->first();
// where 查詢條件不一樣,不鎖定
GameUser::lockForUpdate()->where('name', 'test')->first();
表鎖、行鎖
搜索條件有索引,則走行鎖。沒有走表鎖
但是注意一些導(dǎo)致索引失效的情況下,例如使用<>不等于查詢id,也會(huì)走表鎖