修改mysql隔離級別的方法:1、找到“skip-external-locking”;2、添加“transaction-isolation = READ-COMMITTED”內容;3、重啟mysql服務。
本文操作環境:Windows7系統、mysql5.5版、Dell G3電腦。
怎么修改mysql的隔離級別?
MySQL的事務的隔離級別以及修改方式
修改Mysql的事務隔離級別:
sudo?vim?/etc/mysql/mysql.conf.d/mysqld.cnf
在位置:
lc-messages-dir?=?/usr/share/mysql skip-external-locking
后面添加(讀取提交內容):
transaction-isolation?=?READ-COMMITTED
保存后重啟mysql服務:
sudo?service?mysql?restart
?
SQL的4種隔離級別
Read Uncommitted(讀取未提交內容)
? ? ? ?在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用于實際應用,因為它的性能也不比其他級別好多少。讀取未提交的數據,也被稱之為臟讀(Dirty Read)。
Read Committed(讀取提交內容)
這是大多數數據庫系統的默認隔離級別(但不是MySQL默認的)。它滿足了隔離的簡單定義:一個事務只能看見已經提交事務所做的改變。這種隔離級別 也支持所謂的不可重復讀(Nonrepeatable Read),因為同一事務的其他實例在該實例處理其間可能會有新的commit,所以同一select可能返回不同結果。
Repeatable Read(可重讀)(Mysql默認為此項:REPEATABLE-READ)
? ? ? ?這是MySQL的默認事務隔離級別,它確保同一事務的多個實例在并發讀取數據時,會看到同樣的數據行。不過理論上,這會導致另一個棘手的問題:幻讀 (Phantom Read)。簡單的說,幻讀指當用戶讀取某一范圍的數據行時,另一個事務又在該范圍內插入了新行,當用戶再讀取該范圍的數據行時,會發現有新的“幻影” 行。InnoDB和Falcon存儲引擎通過多版本并發控制(MVCC,Multiversion Concurrency Control)機制解決了該問題。
Serializable(可串行化)
? ? ? ?這是最高的隔離級別,它通過強制事務排序,使之不可能相互沖突,從而解決幻讀問題。簡言之,它是在每個讀的數據行上加上共享鎖。在這個級別,可能導致大量的超時現象和鎖競爭。
? ? ? ??
讀取的是同一個數據時, 容易發生的問題有:
臟讀(Drity Read):某個事務已更新一份數據,另一個事務在此時讀取了同一份數據,由于某些原因,前一個RollBack了操作,則后一個事務所讀取的數據就會是不正確的。
不可重復讀(Non-repeatable read):在一個事務的兩次查詢之中數據不一致,這可能是兩次查詢過程中間插入了一個事務更新的原有的數據。
幻讀(Phantom Read):在一個事務的兩次查詢中數據筆數不一致,例如有一個事務查詢了幾列(Row)數據,而另一個事務卻在此時插入了新的幾列數據,先前的事務在接下來的查詢中,就會發現有幾列數據是它先前所沒有的。
# !
django2.X后,自主更改框架與mysql會話的事務等級為READ-COMMITTED(讀取提交內容), 如要求級別如此, 則不需要更改.
推薦學習:《mysql視頻教程》