数据库事务隔离级别与锁

关系型数据库-SQL的事务隔离级别【TRANSACTION ISOLATION LEVEL】 所谓并发操作,是指多用户共享的系统中,许多用户可能同时对同一数据进行操作。并发操作带来的问题是数据的不一致性,主要有:丢失修改: 如图所示,T1事务对数据库的修改被T2事务覆盖而丢失了,破坏了事务的隔离性。不可重复读: 事务对同一数据进行两次读取的结果不同,原因是两次读取间隙数据被另一事务修改了。读脏数据: 某事务读取的数据是其他事务修改后的值,但该修改后来又被撤销(ROLLBACK)了。幻读: 事务A查询得到N条数据,然后事务B又插入了M条数据,或者改变了这N条数据之外的M条符合事务A搜索条件的数据,导致 阅读详情

一、事务的4个基本特征 
    当事务处理系统创建事务时,将确保事务有某些特性。组件的开发者们假设事务的特性应该是一些不需要他们亲自管理的特性。这些特性称为ACID特性。 ACID就是:原子性(Atomicity )、一致性( Consistency )、隔离性或独立性( Isolation)和持久性(Durabilily)。 
1、原子性 (Atomicity ) 
    原子性属性用于标识事务是否完全地完成,一个事务的任何更新要在系统上完全完成,如果由于某种原因出错,事务不能完成它的全部任务,系统将返回到事务开始前的状态。 
让我们再看一下银行转帐的例子。如果在转帐的过程中出现错误,整个事务将会回滚。只有当事务中的所有部分都成功执行了,才将事务写入磁盘并使变化 永久化。为了提供回滚或者撤消未提交的变化的能力,许多数据源采用日志机制。例如,SQL Server使用一个预写事务日志,在将数据应用于(或提交到)实际数据页面前,先写在事务日志上。但是,其他一些数据源不是关系型数据库管理系统 (RDBMS),它们管理未提交事务的方式完全不同。只要事务回滚时,数据源可以撤消所有未提交的改变,那么这种技术应该可用于管理事务。 
2、一致性( Consistency ) 
    事务在系统完整性中实施一致性,这通过保证系统的任何事务最后都处于有效状态来实现。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。因为事务开 
始时系统处于一致状态,所以现在系统仍然处于一致状态。 再让我们回头看一下银行转帐的例子,在帐户转换和资金转移前,帐户处于有效状态。如果事务成功地完成,并且提交事务,则帐户处于新的有效的状态。如果事务出错,终止后,帐户返回到原先的有效状态。 
记住,事务不负责实施数据完整性,而仅仅负责在事务提交或终止以后确保数据返回到一致状态。理解数据完整性规则并写代码实现完整性的重任通常落在 开发者肩上,他们根据业务要求进行设计。 当许多用户同时使用和修改同样的数据时,事务必须保持其数据的完整性和一致性。因此我们进一步研究A C I D特性中的下一个特性:隔离性。 
3、隔离性 ( Isolation) 
    在隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在 系统中认为只有该事务在使用系统。 这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。重要的是,在隔离状态执行事务, 系统的状态有可能是不一致的,在结束事务前,应确保系统处于一致状态。但是在每个单独的事务中,系统的状态可能会发生变化。如果事务不是在隔离状态运行, 它就可能从系统中访问数据,而系统可能处于不一致状态。通过提供事务隔离,可以阻止这类事件的发生。在银行的示例中,这意味着在这个系统内,其他过程和事 务在我们的事务完成前看不到我们的事务引起的任何变化,这对于终止的情况非常重要。如果有另一个过程根据帐户余额进行相应处理,而它在我们的事务完成前就 能看到它造成的变化,那么这个过程的决策可能 
建立在错误的数据之上,因为我们的事务可能终止。这就是说明了为什么事务产生的变化,直到事务完成,才对系统的其他部分可见。隔离性不仅仅保 证多个事务不能同时修改相同数据,而且能够保证事务操作产生的变化直到变化被提交或终止时才能对另一个事务可见,并发的事务彼此之间毫无影响。这就意味着 所有要求修改或读取的数据已经被锁定在事务中,直到事务完成才能释放。大多数数据库,例如SQL Server以及其他的RDBMS,通过使用锁定来实现隔离,事务中涉及的各个数据项或数据集使用锁定来防止并发访问。 
4、持久性 (Durabilily) 
    持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。应该存在一些检查点防止在系统失败时丢失信息。甚至硬件本身失败,系统的状态仍能通过在日志中记录事务完成的任务进行重建。持久性的概念允许开发者认为不管系统以后发生了什么变化,完 
成的事务是系统永久的部分。 在银行的例子中,资金的转移是永久的,一直保持在系统中。这听起来似乎简单,但这,依赖于将数据写入磁盘,特别需要指出的是,在事务完全完成并提交后才写 入磁盘的。 所有这些事务特性,不管其内部如何关联,仅仅是保证从事务开始到事务完成,不管事务成功与否,都能正确地管理事务涉及的数据 ,当事务处理系统创建事务 时,将确保事务有某些特性。组件的开发者们假设事务的特性应该是一些不需要他们亲自管理的特性。 
二、为什么需要对事务并发控制 
    如果不对事务进行并发控制,我们看看数据库并发操作是会有那些异常情形 
1、丢失更新(Lost update) 
    两个事务都同时更新一行数据,但是第二个事务却中途失败退出,导致对数据的两个修改都失效了。 
2、脏读(Dirty Reads) 
    一个事务开始读取了某行数据,但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险的,因为很可能所有的操作都被回滚。 
3、非重复读(Non-repeatable Reads) 
   一个事务对同一行数据重复读取两次,但是却得到了不同的结果。同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。 
4、二类丢失更新(Second lost updates problem) 
    无法重复读取的特例。有两个并发事务同时读取同一行数据,然后其中一个对它进行修改提交,而另一个也进行了修改提交。这就会造成第一次写操作失效。 
5、幻像读(Phantom Reads) 
    事务在操作过程中进行两次查询,第二次查询的结果包含了第一次查 
询中未出现的数据(这里并不要求两次查询的SQL语句相同)。这是因为在两次查询过程中有另外一个事务插入数据造成的。 
三、数据库的隔离级别 
   为了兼顾并发效率和异常控制,在标准SQL规范中,定义了4个事务隔离级别,(ORACLE和SQLSERER对标准隔离级别有不同的实现 ) 
1、未提交读(Read Uncommitted) 
    直译就是"读未提交",意思就是即使一个更新语句没有提交,但是别 
的事务可以读到这个改变.这是很不安全的。允许任务读取数据库中未提交的数据更改,也称为脏读。 
2、提交读(Read Committed) 
   直译就是"读提交",可防止脏读,意思就是语句提交以后即执行了COMMIT以后 
别的事务就能读到这个改变. 只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 
3、可重复读(Repeatable Read): 
   直译就是"可以重复读",这是说在同一个事务里面先后执行同一个查询语句的时候,得到的结果是一样的.在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读 
4、串行读(Serializable) 
   直译就是"序列化",意思是说这个事务执行的时候不允许别的事务并发执行. 完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

 

四,隔离级别对并发的控制 
下表是各隔离级别对各种异常的控制能力。


LU丢失更新 DR脏读 NRR非重复读 SLU二类丢失更新 PR幻像读
未提交读 RU Y Y Y Y Y
提交读 RC N N Y Y Y
可重复读 RR N N N N Y
串行读 S N N N N N

 

 

顺便举一小例。

MS_SQL: 
--事务一 
set transaction isolation level serializable 
begin tran 
insert into test values('xxx') 
--事务二 
set transaction isolation level read committed 
begin tran 
select * from test 
--事务三 
set transaction isolation level read uncommitted 
begin tran 
select * from test 
在查询分析器中执行事务一后,分别执行事务二,和三。结果是事务二会等待,而事务三则会执行。

ORACLE: 
--事务一 
set transaction isolation level serializable; 
insert into test values('xxx'); 
select * from test; 
--事务二 
set transaction isolation level read committed--ORACLE默认级别 
select * from test 
执行事务一后,执行事务二。结果是事务二只读出原有的数据,无视事务一的插入操作。

MYSQL 
查看InnoDB系统级别的事务隔离级别: 
以下为引用的内容: 
mysql> SELECT @@global.tx_isolation; 
+-----------------------+ 
| @@global.tx_isolation | 
+-----------------------+ 
| REPEATABLE-READ   | 
+-----------------------+ 
1 row in set (0.00 sec) 
查看InnoDB会话级别的事务隔离级别: 
以下为引用的内容: 
mysql> SELECT @@tx_isolation; 
+-----------------+ 
| @@tx_isolation | 
+-----------------+ 
| REPEATABLE-READ | 
+-----------------+ 
1 row in set (0.00 sec) 
修改事务隔离级别: 
以下为引用的内容: 
  mysql> set global transaction isolation level read committed; 
  Query OK, 0 rows affected (0.00 sec) 
  mysql> set session transaction isolation level read committed; 
  Query OK, 0 rows affected (0.00 sec) 
InnoDB的可重复读隔离级别和其他数据库的可重复读是有区别的,不会造成幻象读(phantom read),所谓幻象读,就是同一个事务内,多次select,可以读取到其他session insert并已经commit的数据。下面是一个小的测试,证明InnoDB的可重复读隔离级别不会造成幻象读。测试涉及两个session,分别为 session 1和session 2,隔离级别都是repeateable read,关闭autocommit 
以下为引用的内容: 
mysql> select @@tx_isolation; 
+-----------------+ 
| @@tx_isolation | 
+-----------------+ 
| REPEATABLE-READ | 
+-----------------+ 
1 row in set (0.00 sec) 
  mysql> set autocommit=off; 
  Query OK, 0 rows affected (0.00 sec) 
  session 1 创建表并插入测试数据 
  mysql> create table test(i int) engine=innodb; 
  Query OK, 0 rows affected (0.00 sec)

  mysql> insert into test values(1); 
  Query OK, 1 row affected (0.00 sec) 
  session 2 查询,没有数据,正常,session1没有提交,不允许脏读 
  mysql> select * from test; 
  Empty set (0.00 sec) 
  session 1 提交事务 
  mysql> commit; 
  Query OK, 0 rows affected (0.00 sec) 
  session 2 查询,还是没有数据,没有产生幻象读 
  mysql> select * from test; 
  Empty set (0.00 sec) 
以上试验版本: 
mysql> select version(); 
+-------------------------+ 
| version()       | 
+-------------------------+ 
| 5.0.37-community-nt-log | 
+-------------------------+ 
1 row in set (0.00 sec)

五、并发一致性问题的解决办法 
1 封锁(Locking) 
    封锁是实现并发控制的一个非常重要的技术。所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该 数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。 基本的封锁类型有两种:排它锁(Exclusive locks 简记为X锁)和共享锁(Share locks 简记为S锁)。 
    排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到T释放A上的锁。这就保证了其它事务在T释放A上的锁之前不能再读取和修改A。 
    共享锁又称为读锁。若事务T对数据对象A加上S锁,则其它事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其它事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。 
2 封锁协议 
    在 运用X锁和S锁这两种基本封锁,对数据对象加锁时,还需要约定一些规则,例如应何时申请X锁或S锁、持锁时间、何时释放等。我们称这些规则为封锁协议 (Locking Protocol)。对封锁方式规定不同的规则,就形成了各种不同的封锁协议。下面介绍三级封锁协议。三级封锁协议分别在不同程度上解决了丢失的修改、不 可重复读和读"脏"数据等不一致性问题,为并发操作的正确调度提供一定的保证。下面只给出三级封锁协议的定义,不再做过多探讨。 
    1 级封锁协议是:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和非正常结束(ROLLBACK)。 1级封锁协议可防止丢失修改,并保证事务T是可恢复的。在1级封锁协议中,如果仅仅是读数据不对其进行修改,是不需要加锁的,所以它不能保证可重复读和不 读"脏"数据。 
    2级封锁协议是:1级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。2级封锁协议除防止了丢失修改,还可进一步防止读"脏"数据。 
    3级封锁协议是:1级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放。3级封锁协议除防止了丢失修改和不读'脏'数据外,还进一步防止了不可重复读。 
六、一般处理并发问题时的步骤: 
1、开启事务。 
2、申请写权限,也就是给对象(表或记录)加锁。 
3、假如失败,则结束事务,过一会重试。 
4、假如成功,也就是给对象加锁成功,防止其他用户再用同样的方式打开。 
5、进行编辑操作。 
6、写入所进行的编辑结果。 
7、假如写入成功,则提交事务,完成操作。 
8、假如写入失败,则回滚事务,取消提交。 
9、(7.8)两步操作已释放了锁定的对象,恢复到操作前的状态。


(array7转自:http://www.cnblogs.com/tqsummer/archive/2010/07/11/1775209.html)

低代码部署与管理——OpenClaw智能助手的应用部署与运维(2026技术版) OpenClaw智能助手的低代码部署与管理平台采用分层架构设计,包含部署工具、环境管理、版本控制等核心模块,支持从开发到生产的全流程自动化部署。该系统通过Docker、Kubernetes等技术实现应用构建和部署,利用Terraform等工具管理多环境配置,并提供完善的监控运维能力。平台针对开发、测试、预生产和生产环境提供差异化配置,确保部署效率和运行可靠性。这种架构设计遵循自动化、可扩展性和安全性原则,显著提升了智能助手应用的部署效率和运维质量。 阅读详情

相关推荐

百度地图街景图像批量获取

由于个人研究需要在最近试了一下使用API获取百度地图街景图片,在此介绍一下基于我个人需求的百度街景批量获取方法,本文以Python编码作为主要方法,如果对零编码工具有需要的可以关注一下UA城市分析小组刚刚发布的街景图片获取工具。 街景图像用作区域细粒度空间指标测度需要解决几个问题。 1. 首先就是调用额度的限制,现在百度对于个人认证开发者每天可用的街景图像调用额度为100张,在不考虑购买额度上限(1万张600元,其实有经费的前提下可以直接考虑钞能力)的情况下动辄几千上万张的爬取数量会大大增加需要爬取的时间周

boycetoon29的博客 1万+

oracle事务Serializable,serializable隔离级别下事务特性的几个小测试

oracle里事务的隔离级别主要有以下三类:Read CommittedSerializableRead-only隔离级别可以在会话、事务两个级别上进行设定:———会话级别设定alter session set isolation_level=read committed;alter session set isolation_level=serializable;注:read only无法在会话...

weixin_35620837的博客 603

保姆级教程:用ArcGIS Pro搞定云南30米分辨率DEM地形图(附数据下载与配色方案)

本文提供了一份详细的ArcGIS Pro教程,指导用户如何制作云南30米分辨率DEM地形图。从数据下载、预处理到镶嵌与质量控制,再到地形分析与可视化,全流程覆盖云南复杂地形的处理要点。特别包含数据下载链接、配色方案及常见问题解决方案,适合地理信息分析新手和专业人士。

weixin_30467199的博客 310

SQL Server 事务隔离级别详解

原文:SQL Server 事务隔离级别详解标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设计数据库事务级别 SQL 事务隔离级别 概述      隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一定的影响作用。 步骤 事务隔离级别通过影响读操作来间接地影响写操作;可以在回话级别上设置事务隔离级别也可以在查询(表级别)级别上设置事务...

weixin_34377919的博客 284

Ceres-solver examples之pose_graph_3d学习笔记

Ceres-solver examples之pose_graph_3d学习笔记简要说明变量说明关键步骤一、Costfunction的搭建其中包括:二、构造Problem 简要说明 ceres-solver库是google的非线性优化库,可以对slam问题,机器人位姿进行优化,使其建图的效果得到改善。pose_graph_3d是官方给出的二维平面上机器人位姿优化问题,需要读取一个g2o文件,运行程序...

幽冥小龙的博客 3891

从Safety Manual到系统安全概念

本文系统阐述了构建功能安全"证据链"的工程化方法论,核心要点包括:1)建立"风险→对策→验证→证据"闭环链条;2)SafetyManual和FMEDA作为关键证据支撑点,前者界定系统安全边界,后者量化诊断覆盖率;3)通过四步法继承芯片安全机制并扩展至系统级;4)形成"设计-分析-验证"三维闭环体系,包括安全目标、技术实现和验证矩阵;5)强调证据链闭环对安全认证和OEM认可的重要性。该方法论实现了从理论要求到工程实践的完整转化,确保安全设计可验证、可

VehSwHwDeveloper的博客 725

事务的4种隔离级别(Isolation Level)分别是什么?

事务的4种隔离级别(Isolation Level)分别是什么? 当多个线程都开启事务操作数据库中的数据时,数据库系统要能进行隔离操作,以保证各个线程获...

小麦苗DBA宝典 1万+

RK3588 C++ MeloTTS 推理

本文介绍了基于RK3588平台和RKNN工具链实现的端侧语音合成(TTS)系统。该系统支持中英文混合输入处理,通过自动合并英文单词、转换标点符号等方式预处理文本,并将其转换为音素和声调序列。核心推理流程包含编码器、中间处理和解码器三个阶段:编码器将音素序列转为隐藏状态,中间处理调节音调和语速,解码器生成最终波形。代码示例展示了输入数据设置和模型推理过程,利用RK3588内置NPU实现高效语音合成。该系统展现了在边缘计算设备上实现复杂AI任务的能力。

J。 201

事务、数据库事务、事务隔离级别、锁的简单总结

一、数据库事务 1、事务是作为单个逻辑工作单元执行的一系列操作。可以是一条SQL语句也可以是多条SQL语句。 2、事务具有四个特性  原子性(Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。  一致性(Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。  隔离性(Isolation):事务的执行不受

4999

图神经网络实战(8)——图注意力网络(Graph Attention Networks, GAT)

图注意力网络 (Graph Attention Networks, GAT) 是对图卷积网络 (Graph Convolutional Network, GCN) 的改进,提出了一种通过自注意力 (self-attention) 过程计算的加权因子,而不是使用静态的归一化系数。在本节中,我们介绍了 GAT 架构。通过从线性变换到多头注意力的四个主要步骤,了解了 GAT 的工作原理,并在 NumPy 中从零开始构建了 GAT 层。最后,将 GAT 模型应用于 Cora 和 CiteSeer 数据集。

盼小辉丶的博客 1万+

【实战】基于 Inner-IoU 的 YOLOv8 优化指南:显著提升检测精度

Inner-IoU 凭借辅助边框的创新设计,成功解决了传统 IoU 损失在小目标、遮挡场景下的收敛难题,为 YOLOv8 注入了更强的定位能力。从原理剖析到代码集成,本教程已为你铺就了一条“精度提升”的实战路径。现在,不妨亲自上手尝试,让你的目标检测模型在各类数据集上都能交出一份“精度优异”的答卷——相信我,当你看到检测框精准贴合目标的那一刻,你会明白这份尝试的价值。

m0_64661770的博客 108

数据库事务隔离级别以及锁的使用

数据库为了维护事务的几种性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在。 一次封锁or两段锁? 因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就是在方法的开始阶段,已经预先知道会用到哪些数据,然后全部锁住,在方法运行之后,再全部解锁。这种方式可以有效的避免循环死锁,但在数据库中却不适用,因为在事务开始阶段,数据库并不知道会用到哪些

m0_37235955的博客 346

黑猫带你学UFS协议第13篇:UFS初始化详解(Boot Operation)

本文详细解析了UFS设备的初始化过程,包括部分初始化、加载启动代码(可选)和初始化完成三个阶段。重点介绍了如何通过设备描述符和逻辑单元描述符配置引导特性,以及如何从UFS设备加载启动代码。内容适用于嵌入式硬件和存储领域的开发者。

黑猫奥利奥的博客 3556

MySQL事务、隔离级别、数据库锁

事务本质就一句话:把好几步数据库操作,打包成一个整体,要么全成功提交,要么全失败回滚,绝不允许一半成功、一半失败。最接地气的例子:银行卡转账。A给B转100块,数据库必须做两件事:① A账户余额减100;② B账户余额加100。如果没有事务,第一步扣款成功,中途网络断了、程序报错、数据库宕机,第二步没执行。最后结果就是:A钱没了,B钱没到账,数据直接错乱,这种情况业务完全无法接受。有了事务就不一样:两步操作强绑定,中间哪怕出任何意外,所有操作全部回滚复原;

苍煜 415

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

数据库的事务、隔离级别和锁

事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,,要么撤销不执行。若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。

鹤啸九天 1497

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

GBase 8s事务型数据库的锁与隔离级别介绍

1、什么是事务? 事务是指作为单个逻辑工作单元执行的一系列操作。 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。数据库服务器保证在事务范围内执行的操作完整且正确地提交至磁盘,否则数据库会复原至事务启动之前的状态。 一个逻辑工作单元要成为事务,必须满足所谓的ACID属性。ACID的具体含义如下: 1)A(Atomicity):操作序列要么完整的执行,否则什么都不做; 2)C

weixin_49756686的博客 901

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数据库锁和事务隔离级别

数据库事务锁 创建表account create table account( id int not null auto_increment, name varchar(255) default null, balance int default null, primary key(id) )engine=InnoDB DEFAULT CHARSET=utf8; insert into...

zw147258369的博客 371

关于数据库事务隔离级别与锁

一、什么是事务 事务简单的来说就是把对数据库的一系列操作放到一个可控制的过程中,进行可量化的控制,事务有4个必须的属性原则: 1、原子性:必须保证在一个事务中的操作要么全部执行,要么全部不执行。 2、一致性:事务操作在完成时必须使数据库保持一致的状态,内部数据结构必须是完整的。比如一个例子 A和B都有50块钱,他们两个无论怎么进行相互转账,A+B始终是100。 3、隔离性:简单的来说就是各个事务...

u012599432的博客 563

小白必看!结合实际实例,理解事务、数据库锁以及事务隔离级别等

一、事务的四种特性 事务具备四种属性,分别是原子性,一致性,隔离性,持久性,也就是我们经常说的ACID特性。 原子性(atomicity) 一个事务是一个不可分割的单位,事务中的操作要么都做,要么都不做。 一致性(consistency) 事务是必须使数据库从一个一致性状态到另一个一致性状态。一致性与原子性密不可分。 隔离性(isolation) 一个事务的执行,不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离开来的,并发执行的各个事务之间不能互相干扰。 持久性(du

m0_57767685的博客 210

关于数据库锁,事务,隔离级别

一,数据库中的锁 MySQL采用的是C/S结构的数据库系统,这就意味着同一时间可能会出现多个客户端访问数据库,进行读写,修改等操作。这样一来就会出现一些列的问题。 比如,买车票,同一趟车次只有一张票了,A和B同时读取了,这个数据。此时如果没有约束,双方都以为自己有票,下单后就会出现A和B坐在了同一趟车次的同一个座位上。 对此问题的解决方案有多种,对于MyISAM 存储引擎来说,只能使用锁定(Locking)机制来实现,简单的来说就是一张或者多张表在同一时间只能有一个客户端来使用,在解除锁定之前,其他客

ReStartForTD 284

事务隔离级别与数据库锁

在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别。我们的数据库锁,也是为了构建这些隔离级别存在的。记一下,防止忘记 ...

wanpeng666的博客 151

数据库进阶教学——事务隔离级别和锁的关系

数据库进阶教学——事务隔离级别和锁的关系。

计算机硕士的博客 432

数据库并发问题、事务隔离级别以及数据库锁

一、数据库并发问题     多用户数据库当多个用户同事操作数据库中的数据时可能会发生的并发问题,总结为以下三类:     1. 脏读(Dirty Reads):无效数据读出。     事务1修改了数据库中的一条数据,事务2读取并使用了这条数据,之后事务1出现异常(或其他原因)撤消了对数据的修改。正常情况事务1所操作的数据应该认为没发生任何变化,而实际事务2读取并使用的无效的数据。

Augus6的点点滴滴 1443

数据库锁 与 事务隔离级别

数据库中有读锁和写锁 默认的select语句有锁吗?这个得看数据库引擎的事务的隔离级别。 事务的隔离级别与锁的关系: 没有隔离级别(不加事务???不对,应该是开启了事务,但是没有隔离级别),这个时候会发生脏写问题: 两个线程操作同一条数据,对其进行更新操作,更新会被覆盖。怎么解决这个问题呢? 应该要通过加写锁(X锁)去解决问题,而且应该是在 Read UnCommit这个隔离级别去解决的 Read UnCommit级别:这个级别应该是解决了脏写的问题(通过加写锁解决的? ??这个结论有待确认).

wdquan19851029的专栏 2233
上一篇: 并发包之Future:代码级控制超时时间
下一篇: 数据仓库
七郎
博客等级 码龄14年 31粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值