MYSQL中修改事務隔離等級的方法
阿新 • • 發佈:2019-02-03
在MYSQL中,當很多事務同時進行時,會出現同一個表中的行或者列被多個事務同時讀取或者修改的情況,那麼此時就會出現語句執行優先順序的問題。
例如:
髒讀:在某個事物所做的修改尚未提交時,其他事務就能看見這個修改,並且其他事務認為此修改已經被執行,起作用了,即使進行修改的事務後面被回滾了,沒有執行此操作,其他事務還是會這樣認為。
不可重複讀:同一事務多次使用select語句讀取時,得到的結果不一樣。例如一個事務兩次用select讀取,另外一個事務在他讀取的過程中,對行進行了修改,那麼這兩個select將會得到不一樣的結果。
幻影行:當一個事務對一個表進行select讀取,之後另外一個事務對這個表插入新的行,再次在這個事務進行讀取,則會看到這個新行,其實是一個幻影。
為解決上述的問題,MYSQL的InnoDB引擎提供了四個等級的事務隔離等級,對事務進行等級劃分,規定哪些事務可以看到其他事務所做的修改。
事務隔離級別:
READ UNCOMMITTED:允許其他事務看到尚未提交的行修改
READ CIMMITTED:允許某個事務看到已經提交的行修改
REPEATABLE READ:當一個事務執行兩個相同的語句時,看到的結果是重複的,即使有事務同時修改行,看到的結果也是一樣的(系統預設)
SERIALIZABE:當某個事務在讀取某一行時,只有等他結束之後才能進行修改。
要修改這些事務隔離等級,方法如下:(三種)
set global transaction isolation level LEVEL;
set session transaction isolation level LEVEL;
set transaction isolation level LEVEL;