這篇文章主要介紹MySQL中隔離級別的示例分析,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!
10年積累的成都網(wǎng)站設(shè)計、網(wǎng)站制作經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先做網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有天元免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
MySQL入門--事務(wù)隔離級別
1) 隔離級別介紹
如果一個客戶機的事務(wù)更改了數(shù)據(jù),其他客戶機的事務(wù)是應(yīng)發(fā)現(xiàn)這些更改還是應(yīng)與其隔離,事務(wù)隔離級別可以確定同時進(jìn)行的事務(wù)在訪問相同數(shù)據(jù)時彼此交互的方式。使用存儲引擎可實現(xiàn)隔離級別。隔離級別選項在不同的數(shù)據(jù)庫服務(wù)器之間是不一樣的,因此, InnoDB 所實現(xiàn)的級別可能與其他數(shù)據(jù)庫系統(tǒng)所實現(xiàn)的級別并不完全對應(yīng)。InnoDB 可實現(xiàn)四種隔離級別,用于控制事務(wù)所做的更改在多大程度上可由其他同時進(jìn)行的事務(wù)注意到。四種隔離級別如下:
l READ UNCOMMITTED:允許事務(wù)查看其他事務(wù)所進(jìn)行的未提交更改;允許發(fā)生“臟” 讀、不可重復(fù)讀和虛讀。
l READ COMMITTED:允許事務(wù)查看其他事務(wù)所進(jìn)行的已提交更改;允許發(fā)生不可重復(fù)讀和虛讀。未提交的更改仍不可見。
l REPEATABLE READ:確保每個事務(wù)的 SELECT 輸出一致,InnoDB 的默認(rèn)級別;無論其他事務(wù)所做的更改是否已提交,兩次都會獲得相同的結(jié)果。換句話說,也就是不同的事務(wù)會對相同的數(shù)據(jù)產(chǎn)生一致的結(jié)果。
l SERIALIZABLE:將一個事務(wù)的結(jié)果與其他事務(wù)完全隔離;與 REPEATABLE READ 類似,但其限制性更強,即一個事務(wù)所選的行不能由其他事務(wù)更改,直到第一個事務(wù)完成為止。
2) 設(shè)置隔離級別
系統(tǒng)默認(rèn)事務(wù)級別為:repeatable-read
方法一、 服務(wù)器啟動時設(shè)置級別。
– 在mysqld 命令中使用--transaction-isolation選項。
– 在配置文件中設(shè)置transaction-isolation:
[mysqld]
transaction-isolation =
在選項文件中或在命令行上將
l READ-UNCOMMITTED
l READ-COMMITTED
l REPEATABLE-READ
l SERIALIZABLE
方法二、使用SET TRANSACTION ISOLATION LEVEL 語句為正在運行的服務(wù)器設(shè)置。
– 語法示例:
SET GLOBAL TRANSACTION ISOLATION LEVEL
SET SESSION TRANSACTION ISOLATION LEVEL
SET TRANSACTION ISOLATION LEVEL
對于SET TRANSACTION ISOLATION LEVEL
語句,將
l READ UNCOMMITTED
l READ COMMITTED
l REPEATABLE READ
l SERIALIZABLE。
此事務(wù)級別可以全局設(shè)置,也可以按會話設(shè)置。如果沒有顯式指定,則事務(wù)隔離級別將按會話進(jìn)行設(shè)置。例如,以下語句會將當(dāng)前mysql 會話的隔離級別設(shè)置為READ COMITTED:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
該語句相當(dāng)于:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
要設(shè)置所有后續(xù)mysql 連接的默認(rèn)級別,請使用GLOBAL 關(guān)鍵字,而不是SESSION:
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
注:設(shè)置的全局默認(rèn)事務(wù)隔離級別適用于從設(shè)置時起所有新建立的客戶機連接。現(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中隔離級別的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!