MySQL作為一種關系型數據庫系統,在日常的應用中,數據的隔離性和性能是至關重要的。MySQL為了解決多個事務處理并發訪問時數據的隔離問題,提供了四種隔離級別。
四種隔離級別分別是Read uncommitted(未提交讀)、Read committed(提交讀)、Repeatable read(可重復讀)和Serializable(串行化)。這四種隔離級別的性能差異也是很明顯的。
mysql> SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
mysql> SELECT * FROM TABLE_NAME;
在Read uncommitted隔離級別下,讀取到的數據包括其他活動事務尚未提交的數據,因此會出現臟讀、不可重復讀等問題,性能較高。
mysql> SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
mysql> SELECT * FROM TABLE_NAME WHERE id = 1;
在Read committed隔離級別下,查詢的結果僅僅限于其他活動事務已經提交了的數據,因此臟讀被避免,但是會出現不可重復讀問題,性能一般。
mysql> SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
mysql> SELECT * FROM TABLE_NAME WHERE id = 1;
在Repeatable read隔離級別下,查詢結果是一致的,因為事務始終可以讀取到同樣的數據。但是由于MVCC機制,可能會出現幻讀問題,性能一般。
mysql> SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
mysql> SELECT * FROM TABLE_NAME WHERE id = 1;
在Serializable隔離級別下,事務會完全串行化執行,即使是對同一行數據的讀寫操作也是依次執行的,保證了數據的完整性,但是性能最差
上一篇mysql性能報告怎么看
下一篇css文本整體居中左對齊