事務隔離級別 不可重複讀 spring 測試

2021-08-07 06:47:07 字數 3331 閱讀 5996

(一)

@transactional(isolation = isolation.read_committed)

public object listforillusionread() catch (interruptedexception e)

list> map2 = jdbctemplate.queryforlist("select * from tao");

mapres = new hashmap();

res.put("before", map);

res.put("after", map2);

return res;

}public void updatefornorepeat ()

會話1執行listforillusionread,第一次讀

會話1sleep阻塞

會話2執行update有效會話操作

會話1第二次讀

會話1返回

], "

after

":[ ]}

結論:與理論相符,兩次讀取不一樣

(二)

@transactional(isolation = isolation.repeatable_read)

public object listforillusionread() catch (interruptedexception e)

list> map2 = jdbctemplate.queryforlist("select * from tao");

mapres = new hashmap();

res.put("before", map);

res.put("after", map2);

return res;

}public void updatefornorepeat ()

會話1執行listforillusionread,第一次讀

會話1sleep阻塞

會話2執行update有效會話操作

會話1第二次讀

會話1返回

], "

after

":[ ]}

結論:結論:與理論相符,同乙個會話的兩次讀取一樣,為修改前的

(三)

@transactional(isolation = isolation.read_committed)

public object listforillusionread() catch (interruptedexception e)

list> map2 = jdbctemplate.queryforlist("select * from tao");

mapres = new hashmap();

res.put("before", map);

res.put("after", map2);

return res;

}public void updatefornorepeat ()

public void deletefornorepeat()

會話1執行listforillusionread,第一次讀

會話1sleep阻塞

會話2執行delete有效會話操作

會話1第二次讀

會話1返回

], "

after":}

結論:與理論相符,兩次讀取不一樣

(四)

@transactional(isolation = isolation.repeatable_read)

public object listforillusionread() catch (interruptedexception e)

list> map2 = jdbctemplate.queryforlist("select * from tao");

mapres = new hashmap();

res.put("before", map);

res.put("after", map2);

return res;

}public void updatefornorepeat ()

public void deletefornorepeat()

會話1執行listforillusionread,第一次讀

會話1sleep阻塞

會話2執行delete有效會話操作

會話1第二次讀

會話1返回

], "

after

":[ ]}

結論:與理論相符,兩次讀取一樣,為刪除前的

總結:(一)

修改方            查詢方

thread                   a                     b

transcation          off               on(為了定義隔離級別,也為了定義為一次會話)                             

isolation           not care       read-commited

有重複讀

(二)修改方            查詢方

thread                   a                     b

transcation          off               on(為了定義隔離級別,也為了定義為一次會話)                             

isolation           not care       repeatable_read

無重複讀

(三)修改方            查詢方

thread                   a                     b

transcation          off               on(為了定義隔離級別,也為了定義為一次會話)                             

isolation           not care       read-commited

有重複讀

(四)修改方            查詢方

thread                   a                     b

transcation          off               on(為了定義隔離級別,也為了定義為一次會話)                             

isolation           not care       repeatable_read

隔離級別 不可重複讀 幻讀

參考資料 mysql innodb鎖介紹及不同sql語句分別加什麼樣的鎖 innodb鎖機制 mysql 一致性讀 深入研究 極客時間課程 mysql實戰45講 隔離級別總覽 下面主要講述rc和rr兩個級別 隔離性正是通過鎖機制來實現的。提到鎖就會涉及到死鎖,需要明確的是死鎖的可能性並不受隔離級別的...

MySQL事務隔離級別(髒讀,不可重複讀,幻象讀)

1.事務裡一些有問題的讀取 髒讀,不可重複讀,幻象讀 髒讀 dirty read 事務t1更新了一行記錄的內容,但是並沒有提交所做的修改。事務t2讀取更新後的行,然後t1執行回滾操作,取消了剛才所做的修改。現在t2所讀取的行就無效了。不可重複讀取 nonrepeatable read 事務t1讀取一...

mysql事務隔離級別 髒讀,不可重複讀,幻象讀

髒讀 dirty read 事務t1更新了一行記錄的內容,但是並沒有提交所做的修改。事務t2讀取更新後的行,然後t1執行回滾操作,取消了剛才所做的修改。現在t2所讀取的行就無效了。不可重複讀取 nonrepeatable read 事務t1讀取一行記錄,緊接著事務t2修改 了t1剛才讀取的那一行記錄...