這篇文章主要介紹MySQL中隔離級(jí)別的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先做網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有天元免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
MySQL入門--事務(wù)隔離級(jí)別
1) 隔離級(jí)別介紹
如果一個(gè)客戶機(jī)的事務(wù)更改了數(shù)據(jù),其他客戶機(jī)的事務(wù)是應(yīng)發(fā)現(xiàn)這些更改還是應(yīng)與其隔離,事務(wù)隔離級(jí)別可以確定同時(shí)進(jìn)行的事務(wù)在訪問相同數(shù)據(jù)時(shí)彼此交互的方式。使用存儲(chǔ)引擎可實(shí)現(xiàn)隔離級(jí)別。隔離級(jí)別選項(xiàng)在不同的數(shù)據(jù)庫服務(wù)器之間是不一樣的,因此, InnoDB 所實(shí)現(xiàn)的級(jí)別可能與其他數(shù)據(jù)庫系統(tǒng)所實(shí)現(xiàn)的級(jí)別并不完全對(duì)應(yīng)。InnoDB 可實(shí)現(xiàn)四種隔離級(jí)別,用于控制事務(wù)所做的更改在多大程度上可由其他同時(shí)進(jìn)行的事務(wù)注意到。四種隔離級(jí)別如下:
l READ UNCOMMITTED:允許事務(wù)查看其他事務(wù)所進(jìn)行的未提交更改;允許發(fā)生“臟” 讀、不可重復(fù)讀和虛讀。
l READ COMMITTED:允許事務(wù)查看其他事務(wù)所進(jìn)行的已提交更改;允許發(fā)生不可重復(fù)讀和虛讀。未提交的更改仍不可見。
l REPEATABLE READ:確保每個(gè)事務(wù)的 SELECT 輸出一致,InnoDB 的默認(rèn)級(jí)別;無論其他事務(wù)所做的更改是否已提交,兩次都會(huì)獲得相同的結(jié)果。換句話說,也就是不同的事務(wù)會(huì)對(duì)相同的數(shù)據(jù)產(chǎn)生一致的結(jié)果。
l SERIALIZABLE:將一個(gè)事務(wù)的結(jié)果與其他事務(wù)完全隔離;與 REPEATABLE READ 類似,但其限制性更強(qiáng),即一個(gè)事務(wù)所選的行不能由其他事務(wù)更改,直到第一個(gè)事務(wù)完成為止。
2) 設(shè)置隔離級(jí)別
系統(tǒng)默認(rèn)事務(wù)級(jí)別為:repeatable-read
方法一、 服務(wù)器啟動(dòng)時(shí)設(shè)置級(jí)別。
– 在mysqld 命令中使用--transaction-isolation選項(xiàng)。
– 在配置文件中設(shè)置transaction-isolation:
[mysqld]
transaction-isolation = <isolation_level>
在選項(xiàng)文件中或在命令行上將<isolation_level> 值設(shè)置為:
l READ-UNCOMMITTED
l READ-COMMITTED
l REPEATABLE-READ
l SERIALIZABLE
方法二、使用SET TRANSACTION ISOLATION LEVEL 語句為正在運(yùn)行的服務(wù)器設(shè)置。
– 語法示例:
SET GLOBAL TRANSACTION ISOLATION LEVEL <isolation_level>;
SET SESSION TRANSACTION ISOLATION LEVEL <isolation_level>;
SET TRANSACTION ISOLATION LEVEL <isolation_level>;
對(duì)于SET TRANSACTION ISOLATION LEVEL 語句,將<isolation_level> 值設(shè)置為:
l READ UNCOMMITTED
l READ COMMITTED
l REPEATABLE READ
l SERIALIZABLE。
此事務(wù)級(jí)別可以全局設(shè)置,也可以按會(huì)話設(shè)置。如果沒有顯式指定,則事務(wù)隔離級(jí)別將按會(huì)話進(jìn)行設(shè)置。例如,以下語句會(huì)將當(dāng)前mysql 會(huì)話的隔離級(jí)別設(shè)置為READ COMITTED:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
該語句相當(dāng)于:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
要設(shè)置所有后續(xù)mysql 連接的默認(rèn)級(jí)別,請(qǐng)使用GLOBAL 關(guān)鍵字,而不是SESSION:
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
注:設(shè)置的全局默認(rèn)事務(wù)隔離級(jí)別適用于從設(shè)置時(shí)起所有新建立的客戶機(jī)連接?,F(xiàn)有連接不受影響。
方法三、SET GLOBAL TX_ISOLATION
需要 SUPER 權(quán)限
Mysql>set global tx_isolation=’ READ-COMMITTED’
Mysql>select @@tx_isolation;
Mysql>show variables like ‘tx_isolation’;
transaction_isolation MySQL 5.7.20引入,目的是替換即將棄用的tx_isolation(MySQL 8.0);
(root@localhost) [information_schema]> show variables like '%isolat%';
+-----------------------+-----------------+
| Variable_name | Value |
+-----------------------+-----------------+
| transaction_isolation | REPEATABLE-READ |
| tx_isolation | REPEATABLE-READ |
+-----------------------+-----------------+
transaction_isolation was added in MySQL 5.7.20 as an alias for tx_isolation, which is now deprecated and is removed in MySQL 8.0. Applications should be adjusted to use transaction_isolation in preference to tx_isolation.
以上是“MySQL中隔離級(jí)別的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
分享標(biāo)題:MySQL中隔離級(jí)別的示例分析
文章地址:http://aaarwkj.com/article12/gjipdc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、ChatGPT、建站公司、微信公眾號(hào)、網(wǎng)站制作、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)