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');
}

InnoDB 預設是Row-Level Lock (行級鎖),FOR UPDATE 需要指定明確的主鍵才會行級鎖,否則為表級鎖,如:

select from user where id = 1 (行級鎖)

select from user where id > 1 (表級鎖)

操作完成后無需手動解鎖,會自動解鎖

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM