在事務隔離級別設定為repeatable read的情況下,一般的select語句采取的是一致性非阻塞讀的方式。
一致性是指在事務的范圍內讀取的數據是可重現的,不會出現不可重復讀的情況。非阻塞是指這種讀取數據的模式不會對數據上任何一種鎖,其它操作全都不會被阻塞。
在這種模式下,事務執行讀取語句后,相關的數據會有一套副本出現,并會為這個數據副本附加一個時間戳,其它事務在這個時間戳之后執行的寫操作都不會反映到這個副本中,這種機制被稱之為多版本并發控制。
如果用select …… lock in share mode,則不是一致性非阻塞讀,該語句會等待其它事務的寫語句提交或回滾之后再讀取數據;如果事務隔離級別設置為read committed,也不是一致性非阻塞讀,該語句會讀取其它事務提交的數據。