- 浏览: 427376 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (433)
- 编程语言-JAVA/Scala/Clojure/Grovvy (86)
- 编程语言-C (227)
- 编程语言-Rust/C++/Objective-C/Objective-C++ (97)
- 编程语言-PHP (4)
- 编程语言-Perl (4)
- 编程语言-Javascript (6)
- 编程语言-Scheme/Lisp (9)
- 编程语言-lua (5)
- 编程语言-erl (4)
- 编程语言-go (4)
- 编程语言-Ruby (3)
- 编程语言-python (4)
- 编程语言-smalltalk (3)
- 编程语言-guile (3)
- 算法结构 (32)
- 多线程编程 (2)
- 网络编程 (7)
- 并发编程 (21)
- 并行编程 (2)
- 事务 (4)
- 架构/编程-模型/模式/思想 (6)
- 开发框架-Spring (2)
- 开发框架-ibatis (0)
- 开发框架-Struts (0)
- 开发框架-Hibernate (0)
- 开发框架-mybatis (0)
- 分布式 (38)
- 分布式存储 (10)
- 分布式文件系统-dfs (4)
- 分布式计算 (2)
- 分布式事务 (10)
- 分布式数据中间件 (1)
- 分布式服务框架 (12)
- rpc (8)
- 通信 (23)
- 电信 (3)
- 电商 (1)
- 互联网应用 (2)
- 大前端 (5)
- 第三方支付 (2)
- CSS (1)
- android (3)
- ios (0)
- html5 (0)
- kafka (0)
- memcached (2)
- nginx (1)
- 并行计算 (1)
- 实时计算 (0)
- Storm (0)
- 数据库 (7)
- mysql (6)
- oracle (3)
- redis (4)
- mongodb (2)
- hbase (1)
- dal (0)
- handoop (1)
- 机器学习-ML (3)
- 深度学习-DL (0)
- 神经网络 (0)
- netty (4)
- mina (0)
- 大数据 (7)
- 大数据-算法 (0)
- 大数据-框架&平台 (3)
- 人工智能 (7)
- 人工智能-算法 (4)
- 人工智能-框架&平台 (0)
- 协议 (42)
- 安全 (15)
- 消息队列 (2)
- os(linux、windows) (85)
最新评论
事务属性之隔离性
目录
并发控制
隔离处理和保证相关操作的正确性是数据库管理系统并发控制中必须涵盖的基本机制。这种机制在数据库和存储引擎中大量使用以保证并发事务的正确执行。
两阶段锁是数据库管理系统中最常用的事务并发控制方法。用于提供可串行和可恢复性质,以保证正确性。为了访问数据库对象,事务先要获得该对象的锁。这依赖于访问操作的类型(如读取或写入对象)和要获取的锁类型,如果锁被其他事务占用,获取锁的时候可能该被阻塞或者可能需要延缓等待一段时间后才能获取。
数据库中的各种锁区别
由于各种资料的关系,很多资料在描述锁的时候采用不同甚至混乱的叫法。诸如共享锁、排它锁、读锁、写锁、Share lock、Exclusive lock、S锁、X锁、显式锁以及隐式锁。
其实这里只有两种锁,比较规范的叫法为读锁和写锁。
共享锁其实就是读锁,排它锁其实就是写锁;Share lock 其实就是读锁,Exclusive lock 其实就是写锁;S锁其实就是读锁,X锁其实就是写锁。
读锁是共享锁,在锁定期间,允许其他事务再对数据加读锁,但不能加写锁,也就是允许其他事务读但不能写。
写锁是排他性的,也称排它锁,在锁定期间,其他事务不能在对数据加读锁或写锁,也就是其他事务读或者写。
另外关于显式锁和隐式锁,隐式锁指的是在数据操作(如增删改查)中其实都会隐式(自动)的进行加锁锁定,但针对不同的操作,加锁的类型不同。显式锁指的是我们可显式的进行加锁设定,如在查询操作中可显示的指定排他操作的写锁。如:
select … from … where … for update
隔离级别
隔离级别在SQL标准(http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt)中第4.28 SQL-transactions章节中有定义。
可串行化
这是最高的隔离级别。
在一个基于锁的并发控制的数据库管理系统实现中,可串行化需要在选择的数据上获取读锁和写锁,并在事务结束是释放读锁和写锁。当一个select查询使用的WHERE条件表示一个范围数据的查询时,也必须获取范围锁。
如果使用的是基于无锁(non-lock)的并发控制时,不需要获取锁;但是,如果系统在多个并发事务中检测到一个写冲突时,只有一个被允许提交。
可重复读
提交读
未提交读
读现象
脏读
不可重复读
幻读
隔离级别和读现象的关系
隔离级别 脏读 不可重复读 幻读
未提交读 y y y
提交读 n y y
可重复读 n n y
可串行 n n n
隔离级别和锁定期的关系
隔离级别 写操作 读操作 范围操作(where …)
未提交读 S S S
提交读 C S S
可重复读 C C S
可串行 C C C
1、 https://en.wikipedia.org/wiki/Isolation_(database_systems)
2、 http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
3、 BNF Grammar for ISO/IEC 9075:1992 - Database Language SQL (SQL-92), http://savage.net.au/SQL/sql-92.bnf.html
4、
目录
并发控制
隔离处理和保证相关操作的正确性是数据库管理系统并发控制中必须涵盖的基本机制。这种机制在数据库和存储引擎中大量使用以保证并发事务的正确执行。
两阶段锁是数据库管理系统中最常用的事务并发控制方法。用于提供可串行和可恢复性质,以保证正确性。为了访问数据库对象,事务先要获得该对象的锁。这依赖于访问操作的类型(如读取或写入对象)和要获取的锁类型,如果锁被其他事务占用,获取锁的时候可能该被阻塞或者可能需要延缓等待一段时间后才能获取。
数据库中的各种锁区别
由于各种资料的关系,很多资料在描述锁的时候采用不同甚至混乱的叫法。诸如共享锁、排它锁、读锁、写锁、Share lock、Exclusive lock、S锁、X锁、显式锁以及隐式锁。
其实这里只有两种锁,比较规范的叫法为读锁和写锁。
共享锁其实就是读锁,排它锁其实就是写锁;Share lock 其实就是读锁,Exclusive lock 其实就是写锁;S锁其实就是读锁,X锁其实就是写锁。
读锁是共享锁,在锁定期间,允许其他事务再对数据加读锁,但不能加写锁,也就是允许其他事务读但不能写。
写锁是排他性的,也称排它锁,在锁定期间,其他事务不能在对数据加读锁或写锁,也就是其他事务读或者写。
另外关于显式锁和隐式锁,隐式锁指的是在数据操作(如增删改查)中其实都会隐式(自动)的进行加锁锁定,但针对不同的操作,加锁的类型不同。显式锁指的是我们可显式的进行加锁设定,如在查询操作中可显示的指定排他操作的写锁。如:
select … from … where … for update
隔离级别
隔离级别在SQL标准(http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt)中第4.28 SQL-transactions章节中有定义。
可串行化
这是最高的隔离级别。
在一个基于锁的并发控制的数据库管理系统实现中,可串行化需要在选择的数据上获取读锁和写锁,并在事务结束是释放读锁和写锁。当一个select查询使用的WHERE条件表示一个范围数据的查询时,也必须获取范围锁。
如果使用的是基于无锁(non-lock)的并发控制时,不需要获取锁;但是,如果系统在多个并发事务中检测到一个写冲突时,只有一个被允许提交。
可重复读
提交读
未提交读
读现象
脏读
不可重复读
幻读
隔离级别和读现象的关系
隔离级别 脏读 不可重复读 幻读
未提交读 y y y
提交读 n y y
可重复读 n n y
可串行 n n n
隔离级别和锁定期的关系
隔离级别 写操作 读操作 范围操作(where …)
未提交读 S S S
提交读 C S S
可重复读 C C S
可串行 C C C
1、 https://en.wikipedia.org/wiki/Isolation_(database_systems)
2、 http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
3、 BNF Grammar for ISO/IEC 9075:1992 - Database Language SQL (SQL-92), http://savage.net.au/SQL/sql-92.bnf.html
4、
发表评论
-
mysql: 源代码安装
2020-10-16 02:16 523源代码安装 先安装下面这些软件工具: cmake ... -
mysql: 安装
2020-10-16 00:42 385安装 其实之前已经安装过无数遍了。之前主要是从源代码编译 ... -
Redis: 安装
2020-10-12 05:02 346Redis 安装 其实之前有一篇文章记录过red ... -
Redis: 客户端
2020-10-12 01:07 737客户端 #include <stdio.h> ... -
HBase
2019-08-28 19:19 703HBase -
关于原子性
2019-05-25 00:56 502关于原子性 -
持久性和一致性:事务日志的记录以及在记录数据时和数据保持一致
2019-03-07 18:55 702持久性和一致性:事务日志的记录以及在记录数据时和数据保持一 ... -
关于order的问题
2019-02-27 21:19 498关于order的问题 这 ... -
再谈分布式服务及框架
2019-02-17 02:18 460再谈分布式服务及框 ... -
服务网格 vs 去中心化的服务发现机制的分布式服务
2019-02-16 01:18 758服务网格 vs 去中心化的服务发现机制的分布式服务 -
EVCache
2019-02-14 21:03 01、Ephemeral 2、可见(Volatile) ... -
微服务
2019-02-14 01:44 1011Ribbon是微服务的一个核心基础组件,提供多协议HTTP ... -
MongoDB
2018-10-19 17:31 3156aggregate $match $group $sum $ ... -
Last Agent Optimization
2018-09-30 19:42 474Last Agent Optimization 1. Non ... -
RLP
2018-04-05 14:14 617RLP Recursive Length Prefix RL ... -
dubbo 协议
2017-12-06 16:32 2345encode one to one org.jboss.net ... -
Hessian远程调用(基于Netty)
2017-10-15 15:17 493public class HessianMethodI ... -
RoundRobin
2017-10-15 03:58 501public int index() { ret ... -
纯内存(In-Memory)数据库的可能性, 无需写盘, 使得内存同样具备硬盘的可靠持久化
2017-09-11 22:14 608纯内存(In-Memory)数据库的可能性, 无需写盘 ... -
X/Open DTP模型-组件接口
2017-08-29 14:56 553TX接口 Application Program向Transa ...
相关推荐
在实际应用中,开发者需要根据业务需求来选择合适的事务传播属性和隔离级别,以达到最佳的事务管理和数据一致性。例如,对于需要独立运行的操作,可以选择 REQUIRES_NEW;而对于需要保证数据一致性的查询,可能需要...
在使用事务时,需要了解事务传播特性和事务隔离级别,以确保事务的正确执行和数据的一致性。 在 Java 中,事务传播特性和事务隔离级别都是通过 TransactionDefinition 来定义的。TransactionDefinition 是一个接口...
本文主要关注SSH中的Spring框架在事务管理方面的特性,特别是事务属性。 Spring声明式事务管理是Spring框架的一大亮点,它极大地简化了事务处理的复杂性。在编程时,我们不再需要手动管理数据库连接、关闭连接、...
在深入探讨EJB(Enterprise JavaBeans)的事务属性之前,我们先来理解一下EJB的基本概念及其在企业级应用中的重要性。EJB是Java EE平台的核心组件之一,主要用于构建可扩展、健壮且安全的企业级应用程序。它提供了一...
在Spring框架中,数据库事务管理是其核心特性之一,它为开发者提供了强大的事务控制能力,使得在多线程、分布式环境下的数据一致性得以保障。本资料主要探讨的是Spring支持的数据库事务传播属性和事务隔离级别。 一...
事务的隔离级别定义了事务之间相互隔离的程度,从而影响事务的一致性。Spring支持四种标准的SQL隔离级别: 1. **ISOLATION_DEFAULT** - 使用数据库默认的隔离级别。 2. **ISOLATION_READ_UNCOMMITTED** - 最低的...
事务隔离级别用于控制并发事务之间的数据可见性。Spring 支持以下几种隔离级别: 1. **ISOLATION_DEFAULT** - **定义**:使用数据库默认的事务隔离级别。 - **应用场景**:适用于大多数情况下的数据库操作,保持...
事务的ACID属性是确保数据库事务正确执行的四个关键特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。本文将详细探讨这四个属性,并展示如何在实际的数据库操作中...
事务通常包含四个基本属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),合称为ACID特性。 在SQL SERVER和ORACLE中,事务隔离级别是不同的,它们决定了并发操作时...
事务是一个逻辑处理单元,由一组SQL语句组成,具有原子性、 一致性、隔离性和持久性四个属性。原子性保证事务是一个不可分割的操作单元;一致性保证事务开始和完成时数据的一致性;隔离性保证事务在不受外部并发操作...
TransactionDefinition接口是Spring事务管理的核心接口之一,它提供了定义事务特性的方法,包括事务的隔离级别、超时时间、读写模式以及我们关注的事务传播属性。事务传播属性定义了当一个事务方法被另一个事务方法...
隔离性(Isolation):隔离执行事务,使它们好像是系统在给定时间内执行的唯一操作。 持久性(Durability):事务完成后,该事务对数据库的更改持久保存在数据库中。 事务的隔离性 对于同时运行的多个事务,当这些事物...
在配置事务时,我们需要关注事务属性,这些属性定义了事务的行为和特性,包括事务的传播行为、隔离级别、超时值和只读标志。 首先,事务的传播行为是由`getPropagationBehavior()`方法定义的,它指定了当前事务如何...
事务的隔离级别(Isolation Level)是指事务在并发环境中的隔离性。它定义了事务如何避免脏读、不可重复读和幻像读等问题。 1. 脏读(Dirty Reads):一个事务正在对数据进行更新操作,但是更新还未提交,另一个...
事务处理涉及到一组数据库操作,这些操作要么全部成功执行,要么全部不执行,从而保持数据的原子性、一致性、隔离性和持久性(ACID特性)。这篇文章将深入探讨SQL Server 2000中的事务处理隔离级别及其对事务一致性...
总结起来,Spring的事务属性是确保数据一致性和正确性的基石,通过合理配置事务隔离级别、传播行为、超时时间和只读属性,开发者可以有效地控制并发环境中的事务行为,从而保证系统的稳定性和数据的一致性。...
事务有四个关键属性,也被称为ACID(原子性、一致性、隔离性和持久性)原则。 1. 原子性(Atomicity):原子性保证了事务中的所有操作要么全部成功,要么全部失败。如果在事务执行过程中出现错误,系统会回滚所有已...
我们的数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能 就会导致我们说的脏写、脏读、不可重复... 隔离性(Isolation) :数据库系统提供一定的隔离机制,保证事务在不受外
事务是一个逻辑处理单元,由一组SQL语句组成,具有四个基本属性:原子性、一致性、隔离性和持久性。原子性是指事务是一个不可分割的操作单元,一致性是指事务在开始和完成时数据保持一致状态,隔离性是指数据库系统...
首先,我们要理解事务的四大特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称ACID属性。原子性确保事务中的所有操作要么全部完成,要么全部不完成;一致性则...