晋江文学城
下一章   目录  设置

1、第 1 章 数据库系统 ...

  •   数据库系统原理上

      事务:事务指的是满足ACID特性的一组操作,可以通过commit 提交一个事务,也可以使用rollback 进行回滚

      ACID

      1. 原子性(Atomicity)事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功要么全部失败回滚。回滚可以用回滚日志实现。回滚日志记录着事务所执行的修改操作,在回滚时反向执行这些修改操作即可
      2. 一致性(Consistency)数据库在事务执行前后都保证一致性状态。在一致性状态下,所有事务对同一个数据的读取结果都是相同的。
      3. 隔离性(Isolation)一个事务所做的修改在最终提交以前,对其他事务时不可见的
      4. 持久性(Durability)一旦事务提交,则其所做的修改将会永远保存到数据库中,即使系统发生崩溃,事务执行的结果也不能丢失。系统发生崩溃可以用重做日志(redo log)进行回复,从而实现持久性,与回滚日志记录数据的逻辑修改不同,重做日志记录的是数据页的物理修改。

      只有满足一执行,事务的执行结果才是正确的

      在无并发的情况下,事务串行执行,隔离性一定能够满足。此时只要能满足原子性,就一定能满足一致性

      在并发情况下,多个事务并行执行,事务不仅要满足原子性,还需要满足隔离性,才能满足一致性。

      事务满足持久性是为了能应对系统崩溃的情况

      AUTO COMMIT: my sql 默认采用自动提交的模式,也就是说,如果不显式使用start transaction 语句来开始一个事务,那么每个查询操作都会被当作一个事务并自动提交。

      并发一致性:

      丢失修改:一个事务的更新操作被另外一个事务的更新操作替换,现实生活中常遇到。

      读脏数据:在不同事务下,当前事务可以读到另外事务未提交的数据。例如:T1修改数据,T2读取,T1撤销修改,那么T2读取到的是脏数据。

      不可重复读:指在一个事务内多次读取同一数据集合。T1 读取,T2修改并提交,T1 再次读取,两次读取结果不同

      幻影读:和不可重复读类似,但是读取的是范围数据

      产生并发不一致问题的主要原因是破坏了事务的隔离性,解决方法是通过并发控制来保证隔离性。并发控制可以通过封锁来实现,但是封锁操作需要用户自己控制,相当复杂。数据库管理系统提供事务的隔离级别,让用户以更轻松方式处理并发一致性问题。

      封锁

      封锁粒度:行级锁和表级锁。尽量只封锁需要修改那部分数据。锁定的数据量越小,系统并发程度越高,但是消耗资源越大;需要在锁的开销程度和并发程度做权衡。

      封锁类型:

      1. 读写锁:互斥锁(X锁,写锁);共享锁(S锁,读锁); T1对数据A加X锁,可以对A读取和更新,加锁期间其他事务不可以对A加任何锁;T1 对数据A加了S锁,可以对A进行读操作但是不可以更新,加锁期间其他事务可以对A加S锁但是不能加X锁
      2. 意向锁:支持多粒度封锁。同时存在表锁和行锁,添加IX和IS锁,均为表锁。一个事务在获得某个数据行的S锁之前,需要获得IS锁或者更强的锁,一个事务在获得X锁之前必须先获得IX锁。事务 T 想要对表 A 加 X 锁,只需要先检测是否有其它事务对表 A 加了 X/IX/S/IS 锁,如果加了就表示有其它事务正在使用这个表或者表中某一行的锁,因此事务 T 加 X 锁失败。

      封锁协议:

      1. 三级封锁协议:

      1. 一级封锁协议:事务T要修改A时必须加X锁,知道T结束才释放,可以解决丢失修改的问题
      2. 二级封锁协议:在一级基础上要求读取数据A时必须加S锁,读取完毕马上释放。可以解决读取脏数据问题
      3. 三级封锁协议:在二级基础上,要求读取数据A时必须加S锁,事务结束才释放,可以解决不可以重复读的问题

      2. 两段锁协议

      1. 加锁和解锁分为两个阶段进行。可串行化调度指:

      2. 通过并发控制,使得并发执行的事务结果与某个串行执行的事务结果相同。串行执行的事务互不干扰,不会出现并发一致性问题。

      事务遵循两段锁协议是保证可串行化调度的充分条件。例如以下操作满足两段锁协议,它是可串行化调度。但是不是必要条件

      3. MySql 隐式锁定和显式锁定

  • 昵称:
  • 评分: 2分|鲜花一捧 1分|一朵小花 0分|交流灌水 0分|别字捉虫 -1分|一块小砖 -2分|砖头一堆
  • 内容:
  •             注:1.评论时输入br/即可换行分段。
  •                 2.发布负分评论消耗的月石并不会给作者。
  •             查看评论规则>>