`

数据库锁,事务以及锁

阅读更多
一、事务

I : 事务的定义:

首先,让我们了解下什么是事务?事务是作为单个逻辑单元工作执行的一系列操作。可以是一条 sql 语句,也可以是多条 sql 语句 ( 这是它的描述性定义 ) 。

II 事务的特性:

1 )原子性 (Atomic) :指整个数据库事务是不可分割的工作单位。

2 )一致性 (Consistency) :指数据库事务不能破坏关系数据的完整性以及业务逻辑的一致性。

3 ) 隔离性 (Isolation) :指的是在并发环境中,当不同的事务同时操作相同的数据时,每个事务都有各自的完整数据空间。

4 ) 持久性 (Durability) :指的是只要事务成功结束,它对数据库所做的更改就必须永久保存下来。

数据库采用日志来保证事务的原子性,一致性和持久性,日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更改,使数据库退回到执行事务前的初始状态。

数据库使用锁机制来保证事务的隔离性,拥有各自独立的空间。

事务具有这四个特征是什么意思呢?是不是说作为一个事务必须具有这四个特性才成为事务或者就不是事务呢?本人是这样认为的,事务必须有原子性、一致性和持久性三个特征,而隔离性则根据实际的需要确定隔离的程度和隔离的级别(正是基于此才引出后面的事务的隔离级别)。

  III . 事务的隔离级别

1 、数据库事务的隔离级别:四种

那么事务的隔离级别与锁有什么关系呢?本人认为事务的隔离级别是通过锁的机制实现的,事务的隔离级别是数据库开发商根据业务逻辑的实际需要定义的一组锁的使用策略。当我们将数据库的隔离级别定义为某一级别后如仍不能满足要求,我们可以自定义 sql 的锁来覆盖事务隔离级别默认的锁机制。

读取未提交( Read Uncommitted)

这是最低的事务隔离级别,读事务不会阻塞读事务和写事务,写事务也不会阻塞读事务,但是会阻塞写事务。这样造成的一个结果就是当一个写事务没有提交的时候,读事务照样可以读取,那么造成了脏读的现象。

读取已提交 (Read Committed)

采用此种隔离界别的时候,写事务就会阻塞读事务和写事务,但是读事务不会阻塞读事务和写事务,这样因为写事务会阻塞读取事务,那么从而读取事务就不能读到脏数据 ,但是因为读事务不会阻塞其它的事务,这样还是会造成不可重复读的问题

可重复读( Repeatable Read)

采用此种隔离级别,读事务会阻塞写事务 ,但是读事务不会阻塞读事务,但是写事务会阻塞写事务和读事务 。因为读事务阻塞了写事务,这样以来就不会造成不可重复读的问题,但是这样还是不能避免幻影读问题。

序列化( serializable)

此种隔离级别是最严格的隔离级别,如果设置成这个级别,那么就不会出现以上所有的问题(脏读,不可重复读,幻影读)。但是这样以来会极大的影响到我们系统的性能,因此我们应该避免设置成为这种隔离级别。

在实践中,我们一般采用读取已提交或者更低的事务隔离级别,配合各种并发访问控制策略来达到并发事务控制的目的。

二、锁

MySQL 的 InnoDB 有两种模式的行锁:

1 )共享锁:允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。

    ( Select * from table_name where ......lock in share mode)

2 )排他锁:允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和   排他写锁。 (select * from table_name where.....for update)

     为了允许行锁和表锁共存,实现多粒度锁机制;同时还有两种内部使用的意向锁(都是表锁),分别为意向共享锁和意向排他锁。

InnoDB 行锁是通过给索引项加锁来实现的,即只有通过索引条件检索数据, InnoDB 才使用行级锁,否则将使用表锁!

三、并发控制

当许多人试图同时修改数据库中的数据时,必须实现一个控制系统,使一个人所做的修改不会对其他人产生负面影响,这成为并发控制,并发控制有两种类型:

乐观并发控制和悲观并发控制。

乐观并发控制:

乐观锁:

基本思想:每次提交一个事务更新时,我们先看看要修改的东西从上次读取以后有没有被修改过,如果修改过,那么更新就会失败。

乐观锁其实并不会锁定任何记录,所以如果我们数据库的事务隔离级别设置为读取已提交或者更低的隔离界别,那么是不能避免不可重复读问题的(因为此时读事务不会阻塞其它事务),所以采用乐观锁的时候,系统应该要容许不可重复读问题的出现。

乐观锁的实现策略

版本 (Version) 字段:在我们的实体中增加一个版本控制字段,每次事务更新后就将版本字段的值加 1.

时间戳 (timestamps): 采取这种策略后,当每次要提交更新的时候就会将系统当前时间和修改时间。

悲观锁也就是上面讲到的我们认为的通常意义上的锁 。
分享到:
评论

相关推荐

    数据库安全事务与锁数据库安全事务与锁

    在实验中,可以通过编写事务程序,观察在更新数据库记录(如courses表中的database课程信息)时,事务如何获取和释放锁,以及锁定的资源类型。通过分析锁的获取和释放过程,可以深入理解锁的工作机制以及可能产生的...

    查看数据库的锁以及事务锁表的超时的调查

    博客的代码,查看当前导致数据库锁的具体sql语句,调查代码逻辑死锁导致数据库超时的例子,对应的博客文章位置http://blog.csdn.net/pfe_nova/article/details/9055981 注意将代码配置文件的连接字符串改成自己实际...

    数据库锁和事务的详细讲解

    详细描述数据库锁和事务的内容,其中包括各种类型的锁的讲述,事务的控制

    一次长事务导致数据库锁等待超时问题跟踪

    总之,一次长事务导致数据库锁等待超时问题,是数据库管理中的常见挑战。通过理解事务、锁机制和超时原理,结合有效的诊断方法和解决策略,我们可以有效地避免和解决此类问题,确保数据库系统的稳定运行。

    oracle数据库锁使用

    Oracle 数据库锁是确保数据完整性、一致性以及并发操作的关键机制。在Oracle中,锁主要分为两类:数据锁(DML锁)和字典锁。字典锁主要用于内部管理,特别是语法分析和DDL操作,用户无法直接控制。而数据锁则是我们...

    数据库中事务和锁.ppt

    在数据库管理系统中,事务和锁是两个至关重要的概念,它们主要用于保证数据的一致性和完整性,以及在多用户环境下的并发访问控制。 事务是数据库操作的基本单位,它封装了一组数据库操作,这些操作要么全部执行,...

    sybase数据库查被锁的表.doc

    Sybase 数据库锁机制和锁表查询 Sybase 数据库锁机制是指数据库管理系统中用于控制并发访问和维护数据一致性的机制。锁机制可以防止多个事务同时访问同一资源,避免数据的不一致和损坏。 在 Sybase 数据库中,锁...

    数据库之事务调优

    数据库之事务调优是数据库管理中的一个重要环节,它关乎到系统的性能、稳定性和并发处理能力。事务是数据库操作的基本单位,确保数据的一致性、完整性和可靠性。在高并发、大数据量的环境下,有效的事务调优能显著...

    数据库事务、hibernate悲观锁和乐观锁

    数据库事务是数据库操作的核心组成部分,它确保了数据的一致性和完整性。事务是由一系列数据库操作组成的逻辑单元,这些操作要么全部成功执行,要么全部不执行,遵循ACID(原子性、一致性、隔离性和持久性)原则。 ...

    数据库锁的详细介绍

    数据库锁的详细介绍 数据库锁是数据库管理系统中的一种机制,用于保护数据库对象不被修改。它可以防止对象被两个不同的用户同时修改,数据库系统创建了锁这种复杂的数据结构,来实现锁定机制。 锁的作用: 1. ...

    MS SQL Server数据库事务锁机制分析

    MS SQL Server 数据库的事务锁机制是确保数据库完整性和一致性的关键组成部分,它涉及到多用户环境下的并发控制和数据安全。锁是一种软件机制,用于防止多个用户在同一时间对同一资源进行冲突操作,确保数据的一致性...

    数据库事务及锁机制面试题

    ### 数据库事务及锁机制详解 #### 一、事务的概念与特性 事务是数据库系统中一组操作的集合,用于确保数据的一致性和完整性。在事务处理中,事务被视为一个不可分割的工作单元,其中包含的操作要么全部成功,要么...

    如何解决informix数据库锁表问题.doc

    Informix 数据库锁表问题解决方案 在 Informix 数据库中,锁表问题是一个常见的错误,会导致系统性能下降和数据不一致。锁表问题的解决需要对数据库进行深入的分析和诊断。本文将讨论 Informix 数据库锁表问题的...

    数据库事务总结 数据库事务总结

    通过上述分析可以看出,理解事务的基本概念以及如何正确地管理和控制事务对于开发高质量的应用程序至关重要。事务的管理不仅涉及理论知识,还需要根据实际应用场景选择合适的事务隔离级别,并合理利用乐观锁或悲观锁...

    浅析SQL Server数据库事务锁机制.pdf

    在介绍SQL Server数据库事务锁机制之前,首先需要了解锁的概念。锁是网络数据库中的一个非常重要的概念,主要用于在多用户环境下保证数据库的完整性和一致性。锁通过指示某个用户(即进程会话)已经占用了某种资源,...

    数据库锁学习文档

    本文将深入探讨数据库锁的分类、工作原理以及在Oracle数据库中的应用。 首先,数据库锁分为两大类:排他锁(X)和共享锁(S)。排他锁允许持有者对锁定资源进行读写操作,但不允许其他用户进行任何操作。共享锁则...

    数据库事务管理及锁.xmind

    数据库事务管理及锁机制原理剖析:包括事务特性 ACID、数据隔离级别、事务实现的原理、锁机制,及过程中可能遇到的查询效率及死锁问题等

    数据库的事务与锁

    ### 数据库的事务与锁 #### 一、事务的ACID特性 事务处理是数据库管理系统(DBMS)的核心功能之一,确保了数据的一致性和可靠性。事务处理中的ACID特性是评估事务处理性能的重要标准。 ##### A(Atomicity)原子性 -...

    数据库中的事务管理,恢复以及并发控制技术.doc

    在数据库系统中,事务管理、恢复以及并发控制是至关重要的技术,它们确保了数据库的稳定性和数据的一致性。事务是数据库操作的基本单元,具有原子性、一致性、隔离性和持续性(ACID特性)。原子性意味着事务中的所有...

Global site tag (gtag.js) - Google Analytics