在MySQL讀取數據時可以按照是否使用一致性非鎖定讀來分為快照讀和當前讀:
1、快照讀:MySQL使用MVCC (Multiversion Concurrency Control)機制來保證被讀取到數據的一致性,讀取數據時不需要對數據進行加鎖,且快照讀不會被其他事物阻塞。
2、當前讀:也稱鎖定讀(locking read),通過對讀取到的數據(索引記錄)加鎖來保證數據一致性,當前讀會對所有掃描到的索引記錄進行加鎖,無論該記錄是否滿足WHERE條件都會被加鎖。
在讀提交和可重復讀兩種事務隔離級別下,普通的SELECT操作使用“快照讀”,不會對數據加鎖,也不會被事務阻塞。
在讀提交和可重復讀兩種事務隔離級別下,使用“當前讀”的操作包括:
1、SELECT LOCK IN SHARE MODE
2、SELECT FOR UPDATE
3、DELETE\UPDATE\INSERT INTO\REPLACE INTO
在可重復讀事務隔離級別下,“當前讀”讀取到的時數據庫最新的數據,而“快照讀”讀取到的數據是事務中第一次建立ReadView時的數據+事務中修改的數據。
