看了TP锁的手册 感觉有点不清楚 自己来尝试了一下
必须开启事务 不然锁是不起作用的
public function lock(){
$time = date('H:i:s');
Db::startTrans();//开启事务
try{
$res = Db::table('lock')->lock(true)->where('id', 1)->find();//加锁
Db::table('lock')->where(['id' => 1])->update(['lock' => $res['lock']+10]);
sleep(20);
Db::commit();//事务提交
return $time.'_lock_true_'.date('H:i:s');
} catch (\Exception $e) {
Db::rollback();
throw $e;
}
// $res=Db::table('lock')->lock(true)->where('id',1)->find();
// var_dump($res);
}
打开两个窗口 依次访问两个方法
只有更改和删除的时候会进行等待
等待行锁结束 test的方法才会执行
事务提交 事务回滚 都会自动结束行锁
如果只开启事务 不做数据提交 回滚 另外个方法对该行的操作也需要进行等待
行锁的时候不会影响对当行的查询
public function test(){
$res= Db::table('lock')->where(['id' => 1])->update(['lock' => 1]);
//$res= Db::table('lock')->where(['id' => 1])->delete();
// $res = Db::table('lock')->where('id', 1)->find();//加锁
var_dump($res);
}