概述:事务通过隔离级别控制锁的形式来处理数据的并发问题。
为什么事务能够处理并发问题?
答:事务的特性决定它能够处理并发问题:一致性、隔离性、持久性、原子性
数据的并发有哪些情况?
答:
一、后发生的事务影响前面的事务
1、第一类更新丢失:后发生的事务回滚覆盖了前面提交成功的事务
2、脏读:后发生的事务成功提交覆盖了前面的回滚的事务
3、第二类更新丢失:后发生的事务成功提交覆盖了前面的成功提交的事务
二、后发生的事务受到前面的事务的影响
1、虚读:后一个事务在前后两次读取数据时由于前面的已提交的事务进行了插入操作,
而使数据统计前后不一致。
2、不可重复读:后一个事务在对同一条数据前后两次读取时由于前面的已提交的事务
进行了对这条数据更新操作,而使数据前后不一致。
事务如何处理并发问题?
答:
事务通过锁来处理并发问题一般有两种方式:
悲观锁:通过数据库系统的锁来处理并发
乐观锁:通过应用程序逻辑处理并发
悲观锁的种类有哪些?
答:
一、共享锁:用于读数据操作。
特性:
1、加锁条件:当一个事务执行select语句时数据库系统会为这个事务分配一把共享锁,来锁定被查询的记录。
2、解锁条件:读取完毕则释放共享锁。
3、兼容性:如果数据资源上已经放了共享锁还可放共享锁和更新锁。
4、并发性能:具有良好的并发性能。
二、更新锁:在更新操作的初始化阶段用来锁定可能要被修改的资源,避免使用共享锁造成的死锁问题。
特性:
1、加锁条件:当一个事务执行update语句时,数据库系统会先为事务分配一个更新锁。
2、解锁条件:当读取数据完毕,进行更新操作时将更新锁升级为独占锁。
3、兼容性:与共享锁兼容。一个数据资源上可以有多个共享锁和一个更新锁。
4、允许多个事务同时读锁定的资源,但不允许其它事务修改它。
三、独占锁:修改数据时使用独占锁。
特性:
1、加锁条件:当执行update、delete、insert操作时数据库系统会为数据资源使用独占锁。如果该资源上已经有其它锁
存在时则无法放置独占锁
2、解锁条件:独占锁一直到事务结束才能被解除。
3、兼容性:独占锁不能和其它锁兼容。
4、并发性:并发性能较差。
事务如何控制锁的形式?
答:事务通过事务的隔离级别来控制锁的形式。
事务级别有哪些?并发情况怎样?
答:
隔离级别
|
是否出现第一类丢失更新
|
是否出现脏读
|
是否出现虚读
|
是否出现不可重复读
|
是否出现第二类丢失更新
|
Serializable
|
否
|
否
|
否
|
否
|
否
|
Repeatable Read
|
否
|
否
|
是
|
否
|
否
|
Read Commited
|
否
|
否
|
是
|
是
|
是
|
Read Uncommited
|
否
|
是
|
是
|
是
|
是
|
在应用程序中如何使用乐观锁:
答:一般在数据库表中增加Version或者是TimeStamp字段,根据读取时以及在进行修改操作时Version或者TimeStamp的值不同来控制并发问题。
Hibernate是如何处理并发问题的:
答:
一、Hibernate在读取数据时通过设置锁定模式来控制悲观锁的形式
锁定模式
|
描述
|
LockMode.NONE
|
如果在Hibernate的缓存中存在指定对象,就直接返回该对象的引用;否则就通过Select语句到数据库中加载该对象。这是默认值
|
LockMode.Read
|
不管Hibernate的缓存中是否存在指定对象,总是通过select语句到数据库中加载该对象;如果映射文件中设置了版本元素,就执行版本检查,比较缓存中的指定对象是否和数据库中的版本一致。
|
LockMode.UPGRADE
|
不管Hibernate的缓存中是否存在指定对象,总是通过select语句到数据库中加载该
对象;如果映射文件中设置了版本元素,就执行版本检查,比较缓存中的指定对象是否和数据库中的版本一致。如果数据库系统支持悲观锁就执行
select。。。for update语句,如果数据库系统不支持悲观锁,就执行普通的select语句。
|
LockMode.UPGRADE_NOWAIT
|
和LockMode.UPGRADE具有同样的功能。此外对于Oracle数据库,执行select。。for update nowait语句。
|
LockMode.WRITE
|
当Hibernate向数据库保存或者更新一个对象时,会自动使用此模式。这种模式仅供Hibernate内部使用。
|
二、Hibernate在映射文件中使用乐观锁处理并发问题
1、<version>元素:此元素指定的字段,每进行一次操作就自动加1,在进行读取和修改操作时如果version值不相同则抛出异常,交给应用程序处理。
2、<timestamp>元素:此元素指定的字段数据,每进行一次操作就更新成当前时间。由于当前时间精确到妙所以在处理并发问题的精确性上没有<version>好。
注意:这两个元素在使用时都要紧跟在<id>元素后面。
3、对于现有的数据库表不包含version或者timestamp字段,要处理并发问题可以在<class>元素上进行如下设置:
<class table=”Accounts” optimistic-lock=”all” dynamic-update=”true”>
分享到:
相关推荐
数据库处理的经典资料: 叫你处理事务 如何并发处理 瞧瞧吧 机不可失哟
正确的调度是指多个事务并发执行时,其结果与某一串行调度的结果相同。可串行化的调度称为正确的调度。 七、并发调度的实例 设 T1、T2、T3 是三个事务:T1: A:=A+2, T2: A:=A*2, T3: A:=A*2。设 A 的初值为 0。...
8、数据库安全性管理、数据库事务及并发控制.sql
### 数据库事务总结 #### 一、事务的基本概念与特性 **事务**是数据库系统中的一个逻辑工作单元,它由一系列的操作组成,这些操作要么都完成,要么都不完成,以此来保证数据的一致性和完整性。 #### 二、事务的...
这是一个关于银行的数据库的处理,模仿的是从账户1转账给...那就需要用到事务,如果没有一起执行,就回滚。这个代码比较简单,希望对大家有帮助,自己建立一个数据库bank,在里面建立一个表Account,两属性:Id,money.
### 数据库事务并发与事务加锁 #### 一、数据库事务基本概念 在数据库领域,事务(Transaction)是由一系列操作组成的逻辑工作单元。事务具备四个关键特性:原子性(Atomicity)、一致性(Consistency)、隔离性...
四、数据库事务与并发控制 第八章可能涉及数据库事务的概念,事务的ACID属性(原子性、一致性、隔离性和持久性),以及并发控制机制,如锁和多版本并发控制(MVCC),这些是保证数据库数据一致性的关键。 五、...
6. 数据库事务与并发控制:事务是一系列数据库操作的逻辑单元,必须保证其原子性、一致性、隔离性和持久性(ACID属性)。并发控制处理多用户同时访问数据库时可能出现的问题,如死锁和数据不一致。 7. 数据库恢复:...
四、数据库事务与并发控制 事务是数据库中执行的一系列操作单元,具有原子性、一致性、隔离性和持久性的ACID特性。并发控制则保证多用户环境下事务的正确执行,常见的并发控制技术有锁定、两阶段提交、乐观并发控制...
- **可串行化调度**:虽然事务并发执行,但是其效果等同于串行调度。 #### 五、冲突可串行性 冲突可串行性是一种特殊的可串行化调度,其中只考虑了事务间的冲突操作。如果一个调度中所有的冲突操作都可以重新排列...
【Redis 事务与关系型数据库事务的比较】 Redis 和关系型数据库(如 MySQL)在事务处理上有显著的差异。在Redis中,事务提供了一种批量执行命令的方式,以确保原子性,但其机制与传统的ACID(原子性、一致性、隔离...
数据库实验报告:事务与并发控制.docx
本文提出了一个包含Redis的键值NoSQL数据库的事务模型,以使用户能够以ACID(原子性,一致性,隔离性和持久性)方式访问数据,该模型被生动地称为冲浪并发事务模型。 详细描述了体系结构,重要功能和实现原理。 还...
5. 数据库事务与并发控制:事务是数据库操作的基本单位,ACID属性(原子性、一致性、隔离性和持久性)是事务的重要特征。同时,要理解锁机制、多版本并发控制(MVCC)等并发控制策略。 6. 性能优化:这包括查询优化...
数据库并发控制是数据库管理系统中的关键组成部分,其目的是确保在多用户环境下,多个事务同时执行时,数据的完整性和一致性不受影响。并发控制的主要任务是防止事务间的不正确交互,如脏读、不可重复读和幻读等现象...
6. 数据库事务与并发控制:在多用户环境下,数据库事务处理和并发控制至关重要。这部分将介绍事务的概念、特性(ACID属性),以及并发控制中的锁定机制和乐观锁策略。 7. 数据库恢复与备份:讲解数据库在遇到故障时...
实验四:数据库事务与并发控制 在实际数据库系统中,事务处理和并发控制至关重要。实验将解释事务的ACID(原子性、一致性、隔离性和持久性)属性,并演示如何在SQL中开始、提交和回滚事务。同时,会讨论锁定机制和...
数据库事务处理是数据库管理系统中的核心概念,用于确保数据的一致性和完整性。事务是数据库操作的基本单元,它包含一组逻辑操作,这些操作要么全部执行,要么全部不执行,以确保数据的原子性。事务处理主要关注两个...