Mysql鎖機制和事務控制

2021-08-27 22:02:23 字數 1311 閱讀 5968

[b]如何加鎖[/b]

鎖定表的語法:

lock tables

tbl_name [as alias]

[, tbl_name [as alias] ] ...

[b]解鎖語法[/b]:

unlock tables

innodb的儲存引擎提供行級鎖,支援共享鎖和排他鎖兩種鎖定模式,以及四種不同的隔離級別。

死鎖innodb自動檢測事務的死鎖,並回滾乙個或幾個事務來防止死鎖。innodb不能在mysql lock tables設定表鎖定的地方或者涉及innodb之外的儲存引擎設定鎖定的地方檢測死鎖。你必須通過設定innodb_lock_wait_timeout系統變數的值來解決這些情況。如果要依靠鎖等待超時來解決死鎖問題,對於更新事務密集的應用,將有可能導致大量事務的鎖等待,導致系統異常,所以不推薦在乙個事務中混合更新不同儲存型別的表,也不推薦相同型別的表採用不同的鎖定方式加鎖。

[b]事務控制[/b]

mysql通過set autocommit, start transaction, commit和rollback等語句支援本地事務。語法:

start transaction | begin [work]

commit [work] [and [no] chain] [[no] release]

rollback [work] [and [no] chain] [[no] release]

set autocommit =

預設情況下,mysql是autocommit的,如果需要通過明確的commit和rollback來提交和回滾事務,那麼需要通過明確的事務控制命令來開始事務,這是和oracle的事務管理明顯不同的地方,如果應用是從oracle資料庫遷移到mysql資料庫,則需要確保應用中是否對事務進行了明確的管理。

start transaction或begin語句可以開始一項新的事務。

commit和rollback用來提交或者回滾事務。

chain和release子句分別用來定義在事務提交或者回滾之後的操作,chain會立即啟動乙個新事物,並且和剛才的事務具有相同的隔離級別,release則會斷開和客戶端的連線。

set autocommit可以修改當前連線的提交方式,如果設定了set autocommit=0,則設定之後的所有事務都需要通過明確的命令進行提交或者回滾。

如果我們只是對某些語句需要進行事務控制,則使用start transaction開始乙個事務比較方便,這樣事務結束之後可以自動回到自動提交的方式,如果我們希望我們所有的事務都不是自動提交的,那麼通過修改autocommit來控制事務比較方便,這樣不用在每個事務開始的時候再執行start transaction。

Mysql事務和鎖機制

資料庫事務是資料庫管理系統執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。但不是任意的資料庫操作序列都能成為事務 對mysql常見的引擎有 myisam和innodb,myisam是預設高速的引擎並不支援事務功能,innodb支援行鎖定和事務處理,速度比myisam稍慢。它的存在包含有以下...

mysql事務與鎖機制 mysql事務與鎖機制

在併發下事務會容易出現的一些問題 資料更新丟失 兩個事務同時操作一條資料,乙個事務因為異常導致資料更新丟失 髒讀 乙個失誤開始讀取了某行資料,另外乙個事務已經更新了此資料但沒有能夠及時提交。這是相當危險的,因為很可能所有的操作都被回滾。不可重複讀 乙個事務對同一行資料重複讀取兩次,但是卻得到了不同的...

Mysql事務隔離級別和鎖機制

一.spring支援四種事務隔離級別 1.isolation read uncommitted 讀未提交 這是事務最低的隔離級別,它充許令外乙個事務可以看到這個事務未提交的資料。2.isolation read committed 讀已提交 保證乙個事務修改的資料提交後才能被另外乙個事務讀取。另外乙...