数据库——事务与并发控制

目录

一、事务概述

1.1定义

1.2特性

二、并发控制概述

2.1事务的并发执行

2.2并发执行导致的问题

2.2.1丢失修改

2.2.2读“脏”数据

2.2.3不可重复读

三、封锁

3.1基本锁类型

3.2封锁协议

3.2.1一级封锁协议

3.2.2二级封锁协议

3.2.3三级封锁协议

3.3活锁与死锁

3.3.1活锁

3.3.2死锁

3.3.3死锁的检测与解除

四、并发调度的可串行化

4.1串行调度与并发调度

4.1.1串行调度

4.1.2并发调度

4.2冲突可串行化

五、两阶段锁协议

六、多封锁粒度

6.1粒度

6.2意向锁


一、事务概述

1.1定义

事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单元

事务是并发控制的基本单位,是数据库恢复的基本单位,是数据库的逻辑基本逻辑单元

数据库恢复机制和并发控制机制是数据库管理系统的重要组成部分

在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序

--显式定义事务
begin transaction 
SQL 语句1 
……  ……
commit / rollback

/*
commit
    事务正常结束
    提交事务的所有操作(读+更新)
    事务中所有对数据库的更新写回到磁盘上的物理数据库中

rollback
    事务异常终止
    事务运行的过程中发生了故障,不能继续执行
    系统将事务中对数据库的所有已完成的操作全部撤销
    事务滚回到开始时的状态
*/
--将数学课程号由2修改为22
/*
解析:
所涉及的关系:Course和SC,根据参照完整性约束,应将两表中的2都改为22。要将修改两个表的两个SQL语句定义成一个事务。因为DBMS对这两个语句要么都执行,要不都不执行
*/

begin transaction
    update Course set CNO='22' where CNO='2'
    update SC set CNO='2' where CNO='22'
commit

 

1.2特性

原子性 

  • 事务是数据库的逻辑工作单元
  • 事务的所有操作要么都全部成功地执行,要么都不执行
  • 若事务因故障而中止,则要设法消除该事务所产生的影响,使数据库恢复到该事务执行前的状态

一致性

  • 事务执行的结果必须使数据库从一个一致性状态转变到另一个一致性状态

隔离性 

  • 一个事务的执行不能被其他事务干扰。多个事务并发执行,任何事物的更新操作直到其成功提交,对其他事务都是不可见的

持久性 

  • 一个事务完成后,它对数据库的改变必须是永久的,即使系统出现故障,它对数据库的更新也将永久有效

 

 

二、并发控制概述

事务的并发执行是数据库系统提高系统效率的有效方法,但可能破坏事务的 ACID性质,导致数据的不一致性

2.1事务的并发执行

1、并发执行的理由

  • 提高吞吐量和资源利用率
  • 减少等待时间

2、并发执行方式

  • 交叉并发方式
  1. 单机系统中,事务的并行操作轮流交叉运行
  2. 优点:能够减少处理机的空闲时间,提高系统的效率
  3. 缺点:不是真正的并发操作,可能会产生数据不一致
  • 同时并发方式
  1. 多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并行运行
  2. 优点:最理想的并发方式
  3. 缺点:受制于硬件环境,同样可能会产生数据不一致

 

2.2并发执行导致的问题

2.2.1丢失修改

2.2.2读“脏”数据

2.2.3不可重复读

产生原因

  • 事务T1读取某一数据后,事务T2对其做了修改,事务T1再次读取该数据时,发现与前次不同
  • 事务T1按一定条件读取了某些数据记录后,事务T2删除了其中的部分记录,事务T1再次按相同条件读取记录时,发现有些记录不存在
  • 事务T1按一定条件读取了某些数据记录后,事务T2插入了一些记录,事务T1再次按相同条件读取记录时,发现多了一些记录

 

例:飞机订票系统中的一个活动序列

①甲售票点(事务T1)读出某航班的机票余额A,设A=16;

②乙售票点(事务T2)读出同一航班的机票余额A,也为16;

③甲售票点卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库;

④乙售票点也卖出一张机票,修改余额A←A-1,所以A为15,把A写回数据库

结果明明卖出两张机票,数据库中机票余额只减少1

这种情况称为数据库的不一致性,是由并发操作引起的

在并发操作情况下,对T1、T2两个事务的操作序列的调度是随机的。若

  • 7
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PostgreSQL 是一个功能强大的关系型数据库管理系统,在处理数据库事务并发控制方面有着很多特性和机制。下面是关于 PostgreSQL 数据库事务并发控制的一些重要信息: 1. 数据库事务事务是一组操作的逻辑单元,要么全部执行成功,要么全部回滚。在 PostgreSQL 中,事务的开始和结束通过 BEGIN 和 COMMIT 或 ROLLBACK 语句来定义。默认情况下,每个 SQL 语句都在单独的事务中执行,但你可以使用显式的 BEGIN 和 COMMIT 指令来控制事务的边界。 2. 并发控制并发控制是指在多个用户同时访问数据库时,保证数据的一致性和正确性。PostgreSQL 使用多版本并发控制(MVCC)机制来实现并发控制。MVCC 使用了版本号(或时间戳)来跟踪事务的可见性和一致性。 3. 锁机制:PostgreSQL 使用锁来控制并发访问。锁可以对表、行或其他数据库对象进行加锁,以防止其他事务对其进行修改或访问。锁分为共享锁和排它锁,用于控制读取和写入操作之间的冲突。 4. 事务隔离级别:PostgreSQL 支持四种事务隔离级别,分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。这些隔离级别提供了不同的并发控制策略,可以根据应用程序的需求进行配置。 5. 并发控制配置:PostgreSQL 提供了多种配置选项来调整并发控制的性能和行为。你可以通过修改配置文件或使用 ALTER SYSTEM 命令来更改这些选项。一些常见的配置选项包括 max_connections(最大连接数)、max_locks_per_transaction(每个事务最大锁数)和deadlock_timeout(死锁超时时间)等。 总而言之,PostgreSQL 提供了强大的数据库事务并发控制机制,通过锁机制、MVCC 以及事务隔离级别来处理并发操作和保证数据的一致性。这些特性使得 PostgreSQL 成为处理高并发场景下数据操作的理想选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值