数据库系统原理——17事务与并发控制

「这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战

事务与并发控制

事务概念

所谓事务是用户定义的一个数据操作序列,这些操作可作为一个完整的工作单元,要么全部执行,要么全部不执行,是一个不可分割的工作单元。

事务和程序很相似,但他们是两彼此相联而又不同的概念:程序是静止的,事务是动态的,是程序的执行而不是程序本身;同一个程序的多个独立执行可以同时进行,而每一步执行则是一个不同的事务

事务的操作一般是对数据的更新操作,包括增、删、改

事务特征

为了保证数据的一致性和正确性,数据库系统必须保证事务具有四个特征,即原子性【Atomicity】,一致性【Consistency】,隔离性【Isolation】和持续性【Durability】。这四个特性也简称为事务的ACID特征。

  • 原子性

    事务的原子性保证事务包含的一组更新操作是原子不可分的

  • 一致性

    一致性要求必须满足数据库的完整性约束,且事务执行完毕后将数据库由一个一致性状态转变到另一个一致性状态

  • 隔离性

    隔离性要求事务是彼此独立的、隔离的

  • 持续性

    持续性也称为永久性,是指一个事务一旦提交,他对数据库中数据的改变就应该是永久性的

并发操作问题

  • 丢失更新

    设有两个事务T1和T2,当他们同事读入同一数据并加以修改时,事务T2的提交结果会破坏事务T1提交的结果,由此导致事务T1的修改被丢失

  • 不可重复读

    设有两个事务T1和T2,不可重复读是指事务T1读取数据后,事务T2执行更新操作,使事务T1无法再现前一次的读取结果

  • 读“脏”数据

    设有两个事务T1和T2,读“脏”数据是指,事务T1修改某一数据,并将其写会磁盘,事务T2读取同一数据后,事务T1由于某种原因被撤销,这是事务T1已修改过的数据恢复原值,事务T2读到的数据就与数据库中的数据不一致,则事务T2读到的数据就为”脏“数据,即不正确的数据

这个概念倒是还蛮重要,不管是数据库还是后端程序编码上,都在面试和考试上有一席之地