tp5 lock的使用

首先我們瞭解一下數據庫的鎖,數據庫是一個多用戶使用的共享資源。當多個用戶併發地存取數據時,在數據庫中就會產生多個事務同時存取同一數據的情況。若對併發操作不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性,(注意事項:首先,數據庫類型要是InnoDB,其次,加鎖必須跟事務同時使用)。

在tp5中如何使用:請看以下代碼

public function testTrans(){
    $time = date('H:i:s');
    $model = new \app\model\Student();
    $model->startTrans();//開啓事務
    try{
        $student = $model->lock(true)->where('id', 4)->find();//加鎖
        $student->update(['age' => $student['age']+10], ['id' => 4]);
        sleep(20);
        $model->commit();//事務提交
        return $time.'_lock_true_'.date('H:i:s');
    } catch (\Exception $e) {
        $model->rollback();
        throw $e;
    }
    return $time.'_lock_false_'.date('H:i:s');
}

當我們在瀏覽器中先運行該方法,立即再打開窗口在運行一次,我們看一下結果如下圖

我們發現第二次會在一次運行完之後,也就是在等待20s,事務提交後纔會進行操作

參考鏈接:http://www.thinkphp.cn/topic/46363.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章