MySQL數據庫的事務隔離級別是指在多個事務同時執行時的數據隔離程度。MySQL實現了四種隔離級別:
1. READ UNCOMMITTED(未提交讀)
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
在該隔離級別下,事務可以讀取到其他事務未提交的數據,可能導致臟讀(讀取到了未提交的臟數據)。該級別隔離度最低,性能也最好,但不適合要求數據完整性的應用程序。
2. READ COMMITTED(提交讀)
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
在該隔離級別下,一個事務只能讀取到已經提交的其他事務的數據,可以避免臟讀,但是可能產生不可重復讀(一個事務兩次讀取同一個數據,結果不同)和幻讀(一個事務讀取到其他事務新插入的數據)。該級別是MySQL默認的事務隔離級別。
3. REPEATABLE READ(可重復讀)
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
在該隔離級別下,一個事務在執行期間多次讀取同一個數據,結果必須保持一致。該級別可以避免不可重復讀,但仍有可能產生幻讀。
4. SERIALIZABLE(串行化)
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
在該隔離級別下,事務串行化執行,一個事務執行期間要鎖定所有涉及的數據表,其他事務無法訪問這些數據表。該級別可避免臟讀、不可重復讀和幻讀,但性能最差。