資料庫 行鎖機制 以mysql為例

2021-10-06 12:54:58 字數 1253 閱讀 6095

1、鎖概念:採用innodb引擎的mysql,採用的是行級鎖,刪除資料的時候,mysql會鎖住行記錄,不允許執行其他的操作.

2、分類、特點:行級鎖分為共享鎖和排他鎖,相同之處是都不允許其他事務執行增加、刪除、修改操作,但是可以讀取資料;不同之處是共享鎖允許增加其他鎖,而排他鎖則不允許

(1)共享鎖(s鎖):預設不使用,只有在serializable事務隔離級別,才會給資料讀取填加共享鎖,所以要測試,需要可以手動新增

//視窗一:啟用事務

begin;

//為前10條記錄新增共享鎖

select *

from table where id <

10 lock in share mode;

//視窗二:啟用事務

begin

//新增了共享鎖的前10行記錄,視窗一事務未結束,無法執行以下語句

update table set xx=xx where id <

100;

//視窗三:啟用事務

begin;

//為前10條記錄再加一層共享鎖,在視窗一事務未結束的情況下,操作成功

select *

from table where id <

10 lock in share mode;

結論:共享鎖不允許其他事務執行刪除、修改、新增操作,可以增加其他鎖操作

(2)排他鎖(x鎖):mysql預設為刪除、新增、更新記錄操作設定排他鎖

//視窗一:啟用事務

begin

//預設啟用排他鎖

update table set xx=xx where id <10;

//視窗二:啟用事務

begin

//視窗一事務未結束,無法執行更新操作

delete

from table where id <10;

//視窗三:啟用事務

begin

//手動增加排他鎖(select 語句後加 for update),視窗一事務未結束,無法執行

select *

from table where id <

10for update;

//手動增加共享鎖,視窗一事務未結束,無法執行

select *

from table where id <

10 lock in share mode;

結論:排他鎖不允許其他事務執行刪除、修改、新增操作,也不可以增加其他鎖操作

QT 資料庫操作(以MYSQL為例)

一 載入sql驅動 修改專案檔案pro,新增 qt sql 包含標頭檔案 include 載入資料庫驅動 qsqldatabase db qsqldatabase adddatabase qmysql 設定賬號密碼 db.sethostname localhost db.setdatabasenam...

資料庫學習記錄(以MySQL為例)

docker pull mysql latest docker run restart always name study mysql p 3306 3306 e mysql root password 123456 d mysql latest 登入容器 docker exec it study ...

php 資料訪問(以mysql資料庫為例)

建乙個連線,造乙個連線物件 db new mysqli localhost root 123 mydb 判斷是否出錯 if mysqli connect error mysqli connect error die 連線失敗 寫sql語句 sql select from info 執行sql語句,返...