[MySql学习笔记] 五 锁定和事务处理分离水平

  锁定的种类有共享锁(Shared Lock)和排它锁(eXclusive Lock)。共享锁也教唆读取锁定,上了共享锁后其他用户可以继续读取数据,但是不能修改。排它锁有加写入锁定或者独占锁定,其他用户不能访问数据。

  锁定粒度就是锁定对象的大小,有三种锁定粒度:

  1. 记录(行)
  2. 数据库

  并不是锁定粒度越小越好,如果数据库中行单位粒度的锁定大量发生是,数据库有将这些锁定的李东自动向上提升的机制,通常被成为锁定提升(Lock Escalation)

 

  分离水平用来确定事务处理之间的影响程度(同时运行时相互影响的机制),分离水平越高,数据的整合性随之越高,但同时运行性下降。相反如果分离水平越低,数据整合性降低的同时,运行性提高了。根据数据的用途,分离水平的选择是开发人员必须判断或决定的。分离水平越高,维持锁定的时间久越长,这样同时运行性就会降低。增加死锁产生的概率。

分离水平 读脏数据 不可重复读 产生幽灵数据
READ UNCOMMITTED Y Y Y
READ COMMITTED N Y Y
REPEATEBLE READ N N Y
SERIALIZABLE N N N

  并发操作带来数据不一致情况大致可以分为四类:1.丢失数据修改(另一本书上写的)2.读脏数据 3.不可重复读 4.产生幽灵(或称幻影)数据。

 

  深入理解失误处理内部动作

  与失误处理相关的日志可以分为两种类型,一个UNDO日志,另一个是REDO日志。

  UNDO日志

  又称为回滚段(Rollback Segment),在进行数据的插入、更新、删除的场合,保存变更之前的数据。在ROLLBACK时获得旧数据来覆盖新数据。ROLLBACK后或者COMMIT后,UNDO日志将被删除。

  REDO日志

  有时被称为事务处理日志或者日志。事务处理确定后,由于错误等原因是数据的更新没有正确反映到数据库中的时候,REDO日志提供了数据恢复用的手段。一般来说,对数据库进行了更新这些更新首先被保存在缓冲中,等到一定时间后集中处理,如果这时候出现错误的话,缓冲中的数据被丢失,这就需要REDO来进行复原。

posted @ 2012-12-06 12:26  liangflying  阅读(518)  评论(0编辑  收藏  举报