1樂觀鎖
實現的機制
- 一般會在數據庫中加一個字段一般叫(version)
實現原理
- 取出記錄時,獲取當前version
- 更新時,帶上這個version
- 執行更新時, set version = newVersion where version = oldVersion
- 如果version不對,就更新失敗
2悲觀鎖
3事務
3.1原子性
**原理: **
- 當我們開啓了事務,將數據全部寫到日誌中
- 利用了滾回日誌(undo)
- 如果出現異常,根據日誌中的記錄回滾
保證事務的原子性
3.2持久性
作用: 容災備份
原理:
- 有一個緩衝池,異步線程統統不數據到硬盤中
- 保存在redo日誌文件之中,保證數據的不容易對丟失
3.3隔離性
作用:解決高併發問題,會有以下問題
- 髒讀
- 幻讀
- 不可重複讀
- 更新數據丟失問題
隔離級別:實現原理
通過對鎖的組合實現併發控制
分類:
- 共享鎖(讀鎖)
多個請求可以同時共享一把鎖,提高高併發效率
- 排它鎖(寫鎖)(Sql語句: for update)
排斥其他請求,等待寫入完成,才釋放
- MVCC 多版本併發控制(樂觀鎖原理)
會創建兩個隱藏的列,用來做版本控制,版本不一樣就拒絕寫入
3.4一致性
- 事務完成時,數據必須處於一致狀態,數據的完整性約束沒有被破壞,事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒 有執行過一樣。