mysql、oracle默認(rèn)事務(wù)隔離級(jí)別的說(shuō)明
1.事務(wù)的特性(ACID)
(1)原子性(Atomicity)。事務(wù)中所涉及的程序?qū)?shù)據(jù)庫(kù)的修改操作要么全部成功,要么全部失敗。
(2)一致性(Consistency)。事務(wù)執(zhí)行前和執(zhí)行后來(lái)源和去向保持平衡。
(3)隔離性(Isolation)。并發(fā)時(shí)每個(gè)事務(wù)是隔離的,相互不影響。
(4)持久性(Durubility)。一旦事務(wù)成功提交,應(yīng)該保證數(shù)據(jù)的完整存在。
2.事務(wù)隔離級(jí)別
(1)read uncommitted 未提交讀
所有事務(wù)都可以看到?jīng)]有提交事務(wù)的數(shù)據(jù)。
(2)read committed 提交讀
事務(wù)成功提交后才可以被查詢(xún)到。
(3)repeatable 重復(fù)讀
同一個(gè)事務(wù)多個(gè)實(shí)例讀取數(shù)據(jù)時(shí),可能將未提交的記錄查詢(xún)出來(lái),而出現(xiàn)幻讀。mysql默認(rèn)級(jí)別
(4)Serializable可串行化
強(qiáng)制的進(jìn)行排序,在每個(gè)讀讀數(shù)據(jù)行上添加共享鎖。會(huì)導(dǎo)致大量超時(shí)現(xiàn)象和鎖競(jìng)爭(zhēng)。
MySQL
mysql默認(rèn)的事務(wù)處理級(jí)別是'REPEATABLE-READ',也就是可重復(fù)讀
1.查看當(dāng)前會(huì)話隔離級(jí)別
select @@tx_isolation;
2.查看系統(tǒng)當(dāng)前隔離級(jí)別
select @@global.tx_isolation;
3.設(shè)置當(dāng)前會(huì)話隔離級(jí)別
set session transaction isolatin level repeatable read;
4.設(shè)置系統(tǒng)當(dāng)前隔離級(jí)別
set global transaction isolation level repeatable read;
Oracle
oracle數(shù)據(jù)庫(kù)支持READ COMMITTED 和 SERIALIZABLE這兩種事務(wù)隔離級(jí)別。
默認(rèn)系統(tǒng)事務(wù)隔離級(jí)別是READ COMMITTED,也就是讀已提交
1.查看系統(tǒng)默認(rèn)事務(wù)隔離級(jí)別,也是當(dāng)前會(huì)話隔離級(jí)別
--首先創(chuàng)建一個(gè)事務(wù)
declare trans_id Varchar2(100); begin trans_id := dbms_transaction.local_transaction_id( TRUE ); end;
--查看事務(wù)隔離級(jí)別
SELECT s.sid, s.serial#, CASE BITAND(t.flag, POWER(2, 28)) WHEN 0 THEN 'READ COMMITTED' ELSE 'SERIALIZABLE' END AS isolation_level FROM v$transaction t JOIN v$session s ON t.addr = s.taddr AND s.sid = sys_context('USERENV', 'SID');
補(bǔ)充:SQLserver鎖和事務(wù)隔離級(jí)別
隔離級(jí)別
隔離級(jí)別 | 臟讀 | 不可重復(fù)讀 | 幻象 | 說(shuō)明 |
未提交讀(read uncommitted) | 是 | 是 | 是 | 如果其他事務(wù)更新,不管是否提交,立即執(zhí)行 |
提交讀(read committed默認(rèn)) | 否 | 是 | 是 | 讀取提交過(guò)的數(shù)據(jù)。如果其他事務(wù)更新沒(méi)提交,則等待 |
可重復(fù)讀(repeatable read) | 否 | 否 | 是 | 查詢(xún)期間,不允許其他事務(wù)update |
可串行讀(serializable) | 否 | 否 | 否 | 查詢(xún)期間,不允許其他事務(wù)insert或delete |
請(qǐng)求模式 | IS | S | U | IX | SIX | X |
意向共享(IS) | 是 | 是 | 是 | 是 | 是 | 否 |
共享(S) | 是 | 是 | 是 | 否 | 否 | 否 |
更新(U) | 是 | 是 | 否 | 否 | 否 | 否 |
意向排它(IX) | 是 | 否 | 否 | 是 | 否 | 否 |
與意向排它共享(SIX) | 是 | 否 | 否 | 否 | 否 | 否 |
排它(X) | 否 | 否 | 否 | 否 | 否 | 否 |
鎖
共享鎖:為了共享讀(select),如果存在事務(wù)(一個(gè)或多個(gè))擁有對(duì)表中數(shù)據(jù)(關(guān)于鎖數(shù)據(jù)的多少,視鎖的粒度而定)的共享鎖,不允許對(duì)鎖定的數(shù)據(jù)進(jìn)行更新(update)
排他鎖:只能有一個(gè),其他的事務(wù)就不能對(duì)鎖定的數(shù)據(jù)獲取共享鎖和排他鎖(即排他鎖與共享鎖不能兼容,更多信息請(qǐng)查看鎖兼容性),在此特別強(qiáng)調(diào)一下 鎖定的數(shù)據(jù)。
鎖與隔離級(jí)別
類(lèi)型1
① READUNCOMMITTED:不發(fā)出鎖
② READCOMMITTED:發(fā)出共享鎖,保持到讀取結(jié)束
③ REPEATABLEREAD:發(fā)出共享鎖,保持到事務(wù)結(jié)束
④ SERIALIZABLE:發(fā)出共享鎖,保持到事務(wù)結(jié)束
類(lèi)型2
① NOLOCK:不發(fā)出鎖。等同于READUNCOMMITTED
② HOLDLOCK:發(fā)出共享鎖,保持到事務(wù)結(jié)束。等同于SERIALIZABLE
③ XLOCK:發(fā)出排他鎖,保持到事務(wù)結(jié)束。
④ UPDLOCK:發(fā)出更新鎖,保持到事務(wù)事務(wù)結(jié)束。(更新鎖:不阻塞別的事物,允許別的事物讀數(shù)據(jù)(即更新鎖可與共享鎖兼容),但他確保自上次讀取數(shù)據(jù)后數(shù)據(jù)沒(méi)有被更新)
⑤ READPAST:發(fā)出共享鎖,但跳過(guò)鎖定行,它不會(huì)被阻塞。適用條件:提交讀的隔離級(jí)別,行級(jí)鎖,select語(yǔ)句中。
類(lèi)型3
① ROWLOCK:行級(jí)鎖
② PAGLOCK:頁(yè)級(jí)鎖
③ TABLOCK:表鎖
④ TABLOCKX:表排他鎖
在SELECT語(yǔ)句中使用XLOCK并不能阻止讀。這是因?yàn)镾QL SERVER在讀提交隔離級(jí)別上有一種特殊的優(yōu)化,即檢查行是否已被修改,如果未被修改則忽略XLOCK。因?yàn)樵谧x提交隔離級(jí)別上這確實(shí)是可以接受的。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
- 深入理解Mysql的四種隔離級(jí)別
- MySQL中Innodb的事務(wù)隔離級(jí)別和鎖的關(guān)系的講解教程
- MySQL 四種事務(wù)隔離級(jí)別詳解及對(duì)比
- MySQL四種事務(wù)隔離級(jí)別詳解
- MySQL數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別介紹(Transaction Isolation Level)
- 詳解MySQL中事務(wù)隔離級(jí)別的實(shí)現(xiàn)原理
- mysql 詳解隔離級(jí)別操作過(guò)程(cmd)
- MySQL數(shù)據(jù)庫(kù)事務(wù)隔離級(jí)別詳解
- 通過(guò)實(shí)例分析MySQL中的四種事務(wù)隔離級(jí)別
- MySQL事務(wù)的隔離級(jí)別詳情
- 如何修改mysql的隔離級(jí)別
相關(guān)文章
mysql多版本并發(fā)控制MVCC的實(shí)現(xiàn)
這篇文章主要介紹了mysql多版本并發(fā)控制MVCC的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10MySQL登錄、訪問(wèn)及退出操作實(shí)戰(zhàn)指南
當(dāng)我們要使用mysql時(shí),一定要了解mysql的登錄、訪問(wèn)及退出,下面這篇文章主要給大家介紹了關(guān)于MySQL登錄、訪問(wèn)及退出操作的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10Mysql通過(guò)存儲(chǔ)過(guò)程分割字符串為數(shù)組
今天小編就為大家分享一篇關(guān)于Mysql通過(guò)存儲(chǔ)過(guò)程分割字符串為數(shù)組,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03mysql大小寫(xiě)敏感導(dǎo)致程序無(wú)法啟動(dòng)的問(wèn)題
這篇文章主要介紹了mysql大小寫(xiě)敏感導(dǎo)致程序無(wú)法啟動(dòng)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11MySQL之同表一個(gè)字段如何賦值給另一個(gè)字段
這篇文章主要介紹了MySQL之同表一個(gè)字段如何賦值給另一個(gè)字段問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07iOS開(kāi)發(fā)runloop運(yùn)行循環(huán)機(jī)制學(xué)習(xí)
這篇文章主要為大家介紹了iOS開(kāi)發(fā)runloop運(yùn)行循環(huán)的機(jī)制學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07