`
jayluns
  • 浏览: 146002 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

锁的用处及脏读、不可重复读和幻觉读的概念

sql 
阅读更多

锁就是防止其他事务访问指定的资源的手段。锁是实现并发控制的主要方法,是多个用户能够同时操纵同一个数据库 中 的数据而不发生数据不一致现象的重要保障。一般来说,锁可以防止脏读、不可重复读和幻觉读。脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而 这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数 据是脏数据,依据脏数据所做的操作可能是不正确的。不可重复读是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数 据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的 数据是不一样的,因此称为是不可重复读。幻觉读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中 的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的 数据行,就好象发生了幻觉一样。

前一段时间看了网友的文章介绍,现加入以下隔离的概念, 在这里感谢jeex的帮助

ANSI SQL中定义的4个隔离级实际上是用对锁的操作来定义的:
  脏读: 读数据时不加锁。
  提交读: 在读数据之前加一个读锁,读完之后释放锁。
  可重复读: 在读数据之前加一个读锁,读完之后不释放锁,直到事务rollback或者commit后才释放锁。
  串行化读: 在读数据之前在读取的条件上加锁(称为条件锁),读完之后不释放锁,直到事务rollback或者commit后才释放锁。

分享到:
评论

相关推荐

    脏读不可重复读幻影读

    脏读、不可重复读和幻读都是在事务隔离性不足的情况下可能出现的问题。 1. **脏读**(Dirty Read): - **定义**:当一个事务正在访问数据,并对该数据进行了修改,但这种修改还没有提交到数据库中时,另一个事务...

    数据库锁(行锁,表锁,共享锁,排他锁)脏读、不可重复读、幻读和事物隔离级别

    2. 读提交(Read Committed):仅能读取已提交的数据,避免脏读,但仍可能遇到不可重复读和幻读。 3. 可重复读(Repeated Read):保证同一事务内的多次读取返回相同数据,防止不可重复读,但幻读仍可能发生,如...

    并发控制指的是当多个用户同时更新行时,用于保护数据库完整性的各种技术。并发机制不正确可能导致脏读、幻读和不可重复读等此类问题。

    并发控制的主要目标是避免事务之间的冲突,防止出现诸如脏读、不可重复读和幻读等问题。 脏读发生在事务T1读取了事务T2还未提交的修改数据,然后T2因为某种原因回滚了更改。在这种情况下,T1读到的数据实际上是错误...

    50 听起来很恐怖的数据库幻读,到底是个什么奇葩问题?l.pdf

    为了深入理解幻读,我们首先要清楚几个基础概念:脏写、脏读、不可重复读。 脏写是指两个并发事务同时对同一数据项进行修改,一个事务还没有提交,另一个事务也修改了这个数据项,随后一个事务回滚,导致另一个事务...

    20.幻读是什么幻读有什么问题?1

    - 可重复读(Repeatable Read):在同一事务内,多次读取相同数据的结果保持一致,防止脏读和不可重复读,但可能存在幻读。 - 串行化(Serializable):最严格的隔离级别,通过锁定所有涉及的行,确保事务按顺序执行...

    快速对SQL Server锁机制进行掌握的窍门

    不同的隔离级别决定了事务如何处理脏读、不可重复读和幻读等问题。 4. **脏读、不可重复读和幻读**: - 脏读:一个事务读到了另一个未提交事务的数据修改。 - 不可重复读:同一事务中,两次读取同一数据,结果不...

    浅析SQL Server的锁机制

    它通过控制不同事务对共享资源的访问,防止并发操作带来的数据冲突,如丢失更新、脏读、不可重复读和幻觉读等常见问题。 1. 丢失更新:当两个事务同时对同一数据行进行更新时,最后一个更新会覆盖掉第一个事务的...

    sql server锁机制

    不可重复读可以通过可重复读(Repeatable Read)隔离级别解决,事务A在整个事务期间都能看到一致性视图,不受其他事务的影响。 4. **幻觉读**:事务A在读取数据后,事务B插入了新的行,导致事务A再次读取时看到“新...

    Oracle中使用锁进行并发控制

    锁的运用是并发控制的核心,它能够在多用户环境中协调不同事务的操作,防止数据冲突和异常状态的出现,如脏读、不可重复读和幻觉读。 ### 并发控制的重要性 在现代数据库系统中,尤其是像Oracle这样的大型关系型...

    sqlserver中的事务和锁详细解析

    - 可重复读(Repeatable Read):防止脏读和不可重复读,但可能产生幻读。 - 序列化(Serializable):最高隔离级别,防止脏读、不可重复读和幻读,但并发性能最低。 在SQL Server中,通过设置事务的隔离级别,...

    2021面试题总结MySQL篇.pdf

    - **定义**:最高级别的隔离级别,确保所有 SQL 操作按顺序执行,彻底解决脏读、不可重复读及幻读等问题。 - **特点**:虽然能保证数据一致性,但性能较低。 ### 幻读 - **定义**:在同一事务下,连续执行相同的 ...

    SQL server 中锁机制详解

    可重复读(REPEATABLEREAD):和 2 个 select 语句联系起来的,要求 2 个 select 返回同一个数据集,当两次读之间有记录插入时,会造成幻觉记录; 顺序读(SERIALIZABLE):最高的隔离级别。事务彼此隔离,等同于 ...

    数据库事务与隔离级别.docx

    数据库事务与隔离级别 数据库事务是指一系列操作的集合,作为一个单元执行,以维护数据库的一致性和...数据库提供了多种隔离级别以避免这些问题,例如Serializable(串行化)可以避免脏读、不可重复读、幻读的发生。

    三份数据库并发处理方案

    并发控制的主要目标是防止多个事务在执行过程中产生冲突,例如丢失更新、脏读、不可重复读和幻读等问题。以下是一些关键知识点: 1. **事务**: 事务是数据库操作的基本单位,具有原子性、一致性、隔离性和持久性...

    20 数据库高频知识点.docx

    - **可重复读(Repeatable Read)**:MySQL的默认隔离级别,可以避免脏读和不可重复读,但在特定情况下仍可能发生幻读。 - **串行化(Serializable)**:最高级别的隔离级别,可以避免所有并发问题,但性能较差,...

    Spring中的事务隔离级别的介绍

    * 可重复读(Repeatable Read):避免脏读和不可重复读。但是虚读有可能发生。 * 串行化(Serializable):避免以上所有读问题。 Mysql的默认事务隔离级别是可重复读,而Oracle的默认事务隔离级别是读已提交。 ...

    数据库的四种隔离级别

    总结来说,数据库的四种隔离级别分别是读未提交、读已提交、可重复读和串行化,它们分别针对不同的并发问题:脏读、不可重复读和幻读。理解这些隔离级别及其相互关系,对于理解和优化数据库系统的并发行为至关重要。...

    Mysql事务处理详解

    4. **串行化(Serializable)**:最严格的隔离级别,所有事务按顺序执行,防止脏读、不可重复读和幻读,但可能降低并发性能。 通过`SET TRANSACTION ISOLATION LEVEL`语句可以设置事务隔离级别。 在实际应用中,...

Global site tag (gtag.js) - Google Analytics