读未提交下:
-
增:插入数据后,给新插入的数据上记录锁,防止其它事务更改这条记录
-
删:需要获取到要删除的记录的记录锁,保证删除的时候其它事务没在使用这些数据,并保证删除后其它事务无法对这些数据进行操作
-
改:给需要更改的数据上记录锁
-
查:普通select不上锁,直接读最新数据,不管是否提交,select…for update 或 select … lock in share mode会上记录锁,不锁间隙!
读已提交下:
-
增:插入数据后,给新插入的数据上记录锁,防止其它事务更改这条记录
-
删:需要获取到要删除的记录的记录锁,保证删除的时候其它事务没在使用这些数据,并保证删除后其它事务无法对这些数据进行操作
-
改:给需要更改的数据上记录锁
-
查:普通select不上锁,通过MVCC找到读取的数据,select…for update 或 select … lock in share mode会上记录锁,不锁间隙!
可重复读下:
-
增:使用插入****意向锁,进行插入,插入后给插入的数据上记录锁(隐式锁,其实这个记录锁不是这个时候上的)
-
删:使用临键锁,防止其它事务在删除的区间内插入数据
-
改:给需要更改的数据上临键锁
-
查:普通select不上锁,通过MVCC找到读取的数据,select…for update 或 select … lock in share mode会上临键锁,锁间隙!
串行化读下:
-
增:使用插入****意向锁,进行插入,插入后给插入的数据上记录锁(隐式锁,其实这个记录锁不是这个时候上的)
-
删:使用临键锁,防止其它事务在删除的区间内插入数据
-
改:给需要更改的数据上临键锁
-
查:普通查询自动变为select … lock in share mode,上临键锁,锁间隙!