数据库进阶

2017-02-07  本文已影响0人  manbug

事务

是一个操作序列,是并发控制的基本单位,为了维护数据库的完整性。比如说删除一个人员,要同时删除他的基本资料,还有相关信息,如文章,信箱等,这一系列语句构成事务。

A:Atomicity 原子性, 一组事务,要么成功,要么撤回。
C:Consistency 稳定性, 有非法数据(外键约束之类),撤回事务。
I:Isolation 隔离性, 事务独立运行(100%隔离,牺牲速度),一旦一个事务运行后果影响其他事务,那么其他事务将撤回。
D:Durability 可靠性,一旦软硬件崩溃,可以从日志中恢复(持久化)。

脏读,不可重复读,幻读

  1. 脏读:一个事务读取了另一个事务未提交的数据,该事务可能回滚。
  2. 不可重复读:一个事务多次读取某数据,在该事务提交前,另一个事务访问了该数据(可能修改数据)。
  3. 幻读:事务不独立执行。比如事务1对表中数据进行修改的同时事务2向表中插入数据。

redo/undo log

  1. undo log:数据修改前旧数据的备份,保证事务原子性。
  2. redo log:事务提交前新数据的备份,保证事务持久性。

若数据库宕机时事务已提交,对比redo log,若未提交,对比undo log。

锁类别

乐观锁:别人的每个举动都觉得他会只读,更新时才加锁判断(像github)
悲观锁:别人的每个举动都觉得他要修改,先加锁。
表锁(表级锁:一次性锁定事务涉及到的表):
开销少,加锁快,锁定粒度大,锁冲突概率高,并发度低,不会出现死锁。
行锁:开销大,加锁慢,锁定粒度小,锁冲突概率低,并发度高,会出现死锁。
页锁:性能介于表锁和行锁之间,会出现死锁。
死锁:两个事务之间互有冲突,导致都锁住,无法完成。

索引

上一篇 下一篇

猜你喜欢

热点阅读