MySQL入門--隔離級別

panpong發表於2017-01-16

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   REPEATABLE-READ

l   SERIALIZABLE

 

方法二、使用 SET TRANSACTION ISOLATION LEVEL 語句為正在執行的伺服器設定。

語法示例:

SET GLOBAL TRANSACTION ISOLATION LEVEL <isolation_level>;

SET SESSION TRANSACTION ISOLATION LEVEL <isolation_level>;

<isolation_level>;

對於 SET TRANSACTION ISOLATION LEVEL 語句,將 <isolation_level> 值設定為:

l   READ UNCOMMITTED

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.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16976507/viewspace-2132533/,如需轉載,請註明出處,否則將追究法律責任。

相關文章