9.MySQL中的事務(wù)

目錄:
1.事務(wù)的特性
2.事務(wù)的生命周期
3.事務(wù)的操作
4.事務(wù)的隔離級(jí)別

1. 事務(wù)的特特性

事務(wù)Transactions:一組原子性的SQL語(yǔ)句,或一個(gè)獨(dú)立工作單元

事務(wù)日志:記錄事務(wù)信息,實(shí)現(xiàn)undo,redo等故障恢復(fù)功能
ACID特性:
A: atomicity原子性;整個(gè)事務(wù)中的所有操作要么全部成功執(zhí)行,要么全部失敗后回滾
C: consistency一致性;數(shù)據(jù)庫(kù)總是從一個(gè)一致性狀態(tài)轉(zhuǎn)換為另一個(gè)一致性狀態(tài)
I: Isolation隔離性;一個(gè)事務(wù)所做出的操作在提交之前,是不能為其它事務(wù)所見(jiàn);隔離有多種隔離級(jí)別,實(shí)現(xiàn)并發(fā)
D: durability持久性;一旦事務(wù)提交,其所做的修改會(huì)永久保存于數(shù)據(jù)庫(kù)中

2. 事務(wù)的生命周期

Transaction生命周期.jpg

3. 事務(wù)的操作

啟動(dòng)事務(wù)

BEGIN
BEGIN WORK
START TRANSACTION

結(jié)束事務(wù):

COMMIT:提交
ROLLBACK: 回滾
注意:只有事務(wù)型存儲(chǔ)引擎中的DML語(yǔ)句方能支持此類(lèi)操作
自動(dòng)提交: set autocommit={1|0} 默認(rèn)為1,為0時(shí)設(shè)為非自動(dòng)提交
建議:顯式請(qǐng)求和提交事務(wù),而不要使用“自動(dòng)提交”功能
事務(wù)支持保存點(diǎn): savepoint
SAVEPOINT identifier
ROLLBACK [WORK] TO [SAVEPOINT] identifier
RELEASE SAVEPOINT identifier

4.事務(wù)的隔離級(jí)別

從上至下更加嚴(yán)格

READ UNCOMMITTED 可讀取到未提交數(shù)據(jù),產(chǎn)生臟讀
READ COMMITTED 可讀取到提交數(shù)據(jù),但未提交數(shù)據(jù)不可讀,產(chǎn)生不可重復(fù)讀,即可讀取到多個(gè)提交數(shù)據(jù),導(dǎo)致每次讀取數(shù)據(jù)不一致
REPEATABLE READ 可重復(fù)讀,多次讀取數(shù)據(jù)都一致,產(chǎn)生幻讀,即讀取過(guò)程中,即使有其它提交的事務(wù)修改數(shù)據(jù),仍只能讀取到未修改前的舊數(shù)據(jù)。
                此為MySQL默認(rèn)設(shè)置
SERIALIZABILE 可串行化,未提交的讀事務(wù)阻塞修改事務(wù),或者未提交的修改事務(wù)阻塞讀事務(wù)。導(dǎo)致并發(fā)性能差
MVCC: 多版本并發(fā)控制,和事務(wù)級(jí)別相關(guān)
事務(wù)隔離級(jí)別.jpg

指定事務(wù)隔離級(jí)別:

服務(wù)器變量tx_isolation指定,默認(rèn)為REPEATABLE-READ,可在GLOBAL和
SESSION級(jí)進(jìn)行設(shè)置
SET tx_isolation=''
    READ-UNCOMMITTED
    READ-COMMITTED
    REPEATABLE-READ
    SERIALIZABLE
服務(wù)器選項(xiàng)中指定
vim /etc/my.cnf
    [mysqld]
    transaction-isolation=SERIALIZABLE   注意這個(gè)和服務(wù)器變量名不一樣
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容