您好,登錄后才能下訂單哦!
這篇文章主要介紹MySQL中隔離級別的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
MySQL入門--事務隔離級別
1) 隔離級別介紹
如果一個客戶機的事務更改了數據,其他客戶機的事務是應發現這些更改還是應與其隔離,事務隔離級別可以確定同時進行的事務在訪問相同數據時彼此交互的方式。使用存儲引擎可實現隔離級別。隔離級別選項在不同的數據庫服務器之間是不一樣的,因此, InnoDB 所實現的級別可能與其他數據庫系統所實現的級別并不完全對應。InnoDB 可實現四種隔離級別,用于控制事務所做的更改在多大程度上可由其他同時進行的事務注意到。四種隔離級別如下:
l READ UNCOMMITTED:允許事務查看其他事務所進行的未提交更改;允許發生“臟” 讀、不可重復讀和虛讀。
l READ COMMITTED:允許事務查看其他事務所進行的已提交更改;允許發生不可重復讀和虛讀。未提交的更改仍不可見。
l REPEATABLE READ:確保每個事務的 SELECT 輸出一致,InnoDB 的默認級別;無論其他事務所做的更改是否已提交,兩次都會獲得相同的結果。換句話說,也就是不同的事務會對相同的數據產生一致的結果。
l SERIALIZABLE:將一個事務的結果與其他事務完全隔離;與 REPEATABLE READ 類似,但其限制性更強,即一個事務所選的行不能由其他事務更改,直到第一個事務完成為止。
2) 設置隔離級別
系統默認事務級別為:repeatable-read
方法一、 服務器啟動時設置級別。
– 在mysqld 命令中使用--transaction-isolation選項。
– 在配置文件中設置transaction-isolation:
[mysqld]
transaction-isolation = <isolation_level>
在選項文件中或在命令行上將<isolation_level> 值設置為:
l READ-UNCOMMITTED
l READ-COMMITTED
l REPEATABLE-READ
l SERIALIZABLE
方法二、使用SET TRANSACTION ISOLATION LEVEL 語句為正在運行的服務器設置。
– 語法示例:
SET GLOBAL TRANSACTION ISOLATION LEVEL <isolation_level>;
SET SESSION TRANSACTION ISOLATION LEVEL <isolation_level>;
SET TRANSACTION ISOLATION LEVEL <isolation_level>;
對于SET TRANSACTION ISOLATION LEVEL 語句,將<isolation_level> 值設置為:
l READ UNCOMMITTED
l READ COMMITTED
l REPEATABLE READ
l SERIALIZABLE。
此事務級別可以全局設置,也可以按會話設置。如果沒有顯式指定,則事務隔離級別將按會話進行設置。例如,以下語句會將當前mysql 會話的隔離級別設置為READ COMITTED:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
該語句相當于:
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
要設置所有后續mysql 連接的默認級別,請使用GLOBAL 關鍵字,而不是SESSION:
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
注:設置的全局默認事務隔離級別適用于從設置時起所有新建立的客戶機連接。現有連接不受影響。
方法三、SET GLOBAL TX_ISOLATION
需要 SUPER 權限
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中隔離級別的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。