数据库进阶

事务

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

  • 基本特征:ACID

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)
悲观锁:别人的每个举动都觉得他要修改,先加锁。
表锁(表级锁:一次性锁定事务涉及到的表):
开销少,加锁快,锁定粒度大,锁冲突概率高,并发度低,不会出现死锁。
行锁:开销大,加锁慢,锁定粒度小,锁冲突概率低,并发度高,会出现死锁。
页锁:性能介于表锁和行锁之间,会出现死锁。
死锁:两个事务之间互有冲突,导致都锁住,无法完成。

索引

  • 分类:
    1. 唯一索引:不允许任何两行具有相同索引。
    2. 主键索引:主键作为索引。
    3. 聚集索引:聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。一个表只能有一个聚集索引。
  • 缺点:增加了数据的存储空间,增加和修改数据时花费时间变长。
  • 修改性能和检索性能是相互矛盾的。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容