事务隔离级别

Java实战之02Hibernate-06处理并发

最后都变了- 提交于 2020-01-14 00:57:25
十三、处理并发 1 、事务的隔离级别 不考虑隔离级别出现的问题: 脏读:一个线程中的事务读到了另外一个线程中未提交的数据。 不可重复读:一个线程中的事务读到了另外一个线程中提交的 update (更新)的数据。 虚读:一个线程中的事务读到了另外一个线程中提交的 insert (插入)的数据。 事务的隔离级别: 1 : READ UNCOMMITTED: 脏读、不可重复读、虚读(幻读)都可能发生。 2 : READ COMMITTED: 避免脏读;不可重复读、虚读(幻读)都可能发生。 4 : REPEATABLE READ: 避免脏读、不可重复读,虚读(幻读)可能发生。 8 : SERIALIZABLE: 避免脏读、不可重复读、虚读(幻读)。 通过配置参数 hibernate.connection.isolation=1|2|4|8 进行设置。 MySQL :默认 4 Oracle :默认 2 2 、第二类更新丢失 1 //线程1 2 @Test 3 public void test1(){ 4 Session s = HibernateUtil.getSession(); 5 Transaction tx = s.beginTransaction(); 7 Customer c1 = s.get(Customer.class, 1); 8 c1.setName("泰斯特"); 9

你可能知道事务的四大特性,但是你不一定知道事务的实现原理

天涯浪子 提交于 2020-01-13 20:08:58
说到数据库,那就一定会聊到事务,事务也是面试中常问的问题,我们先来一个面试场景: 面试官:"事务的四大特性是什么?" 我:"ACID,即原子性(Atomicity)、隔离性(Isolation)、持久性(Durability)、一致性(Consistency)!" 面试官:"在 MySQL 数据库的 InnoDB 引擎是怎么实现这四大特性的?" 我:"这个...这个....,还真没有了解过哎" 面试官:"那我们就先这个吧,先回去吧,我们会通知你的~" 这可能是比较常见的面试场景了,你也许回答到了事务的四大特性,但是不一定知道他的实现原理。今天我们就来一起打卡事务的四大特性和实现原理,对于原理的实现,这篇文章只是粗略的介绍一下,更多的细节可以关注我后续的文章。 数据库的事务有四大特性: 原子性、隔离性、永久性、一致性 ,下面将介绍这四大特性的定义和在 InnoDB 引擎中是怎么实现的。 原子性 定义 一次操作是不可分割的,要么全部成功,要么全部失败。比如我们的转账操作,不允许出款方成功,收款方失败这种情况,要么都成功,要么多失败,不可能出现中间状态。 实现 InnoDB 引擎使用 undo log(归滚日志)来保证原子性操作 ,你对数据库的每一条数据的改动(INSERT、DELETE、UPDATE)都会被记录到 undo log 中,比如以下这些操作: 你插入一条记录时

mysql中的锁

你说的曾经没有我的故事 提交于 2020-01-12 08:53:00
mysql中的锁 本文所讨论的是mysql8.0中的锁。 一、行锁-锁模式 共享锁S和排他锁X InnoDB实现了两种行级锁,共享锁和排他锁。 共享锁:允许其他事务读取被锁住的行,但是不允许其他事务对被锁住的行进行写入操作。同时其他事务可以继续给该行加共享锁。 用法:select …for share 排他锁:防止其他事务读取或写入被该锁锁住的行,其他事务必须等待加锁事务的解锁之后才能操作,只有获取排他锁的事务可以读取数据或者写入数据。 用法:select …for update 二、表锁-意向锁 InnoDB支持多粒度的锁,为了实现多粒度锁,innodb采用了意向锁。意向锁是表级锁,表示稍后将对表中的某行加上共享锁或者排他锁。意向锁的主要目的就是表明某人正在某行加锁,或者将要在某行加锁。 IS:意向共享锁,指事务将在表中的单个行上加共享锁。 IX:意向排他锁,指事务将在表中的单个行上加排他锁。 例如, SELECT … FOR SHARE 语句设置一个IS,SELECT … FOR UPDATE 设置一个IX。 意向锁协议如下: 1、事务在获取表中某行上面的共享锁之前,必须获得IS锁,或者IX锁。 2、事务在获取表中某行上面的排他锁之前,必须获得IX锁。 各锁之间的关系如下: 意向排他锁会阻止其他事务对表加上X锁或S锁。意向共享锁会阻止其他的事务加上X锁。 三、锁类型 记录锁

MySQL基础

爱⌒轻易说出口 提交于 2020-01-12 02:57:28
1.MySQL的逻辑架构 2.并发控制 并发控制存在于MySQL的两个层面中:服务器层以及存储引擎层。 2.1 读写锁 共享锁(读锁)是共享的,或者说是相互不堵塞的。多个客户在同一时刻可以同时读取同一个资源而互不干扰。排他锁(写锁)是互斥的,也就是说一个写锁会阻塞其他的写锁和读锁。 2.2 锁粒度 一种提高共享资源并发性的方式是让锁定对象更有选择性。尽量只锁定需要修改的部分数据,而不是所有的资源。任何时候,在给定的资源上,锁定的数据越少,则系统的并发程度就越高。 常见的锁粒度包括 表锁 以及 行锁 。表锁会锁定整张表,行锁同理。行级锁只会在存储引擎层实现,而MySQL服务器层则没有实现。 当然,每一种MySQL存储引擎都可以实现自己的锁策略和锁粒度。将锁粒度固定在某个级别,可以为某些特定的应用场景提供更好的性能,但却会失去对另外一些应用场景的良好支持。好在MySQL支持多个存储引擎的架构,所以不需要单一的通用解决方案。 3.事务 事务就是一组原子性的SQL查询,或者说是一个独立的工作单元。 事务内的语句,要么全部执行,要么全部执行失败。 可以用 start transaction 语句开始一个事务,然后要么使用 commit 提交事务将修改的数据持久保留,要么使用 rollback 撤销所有的修改。 系统需要严格的ACID测试保证事务的概念性(原子性、一致性、隔离性以及持久性)

Spring 事务失效

回眸只為那壹抹淺笑 提交于 2020-01-12 01:46:17
   隔离级别   在 TransactionDefinition.java 接口中,定义了“ 四种 ”的隔离级别枚举: /** * 【Spring 独有】使用后端数据库默认的隔离级别 * * MySQL 默认采用的 REPEATABLE_READ隔离级别 * Oracle 默认采用的 READ_COMMITTED隔离级别 */ int ISOLATION_DEFAULT = -1; /** * 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读 */ int ISOLATION_READ_UNCOMMITTED = Connection.TRANSACTION_READ_UNCOMMITTED; /** * 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生 */ int ISOLATION_READ_COMMITTED = Connection.TRANSACTION_READ_COMMITTED; /** * 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。 */ int ISOLATION_REPEATABLE_READ = Connection.TRANSACTION_REPEATABLE_READ; /** * 最高的隔离级别

MySQL基础知识点大全

守給你的承諾、 提交于 2020-01-11 20:24:35
一、为什么要学习数据库 二、数据库的相关概念 DBMS、DB、SQL 三、数据库存储数据的特点 四、初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动和停止 ★ MySQL服务的登录和退出 ★ MySQL的常见命令和语法规范 五、DQL语言的学习 ★ 基础查询 ★ 条件查询 ★ 排序查询 ★ 常见函数 ★ 分组函数 ★ 分组查询 ★ 连接查询 ★ 子查询 √ 分页查询 ★ union联合查询 √ 六、DML语言的学习 ★ 插入语句 修改语句 删除语句 七、DDL语言的学习 库和表的管理 √ 常见数据类型介绍 √ 常见约束 √ 八、TCL语言的学习 事务和事务处理 九、视图的讲解 √ 十、变量 十一、存储过程和函数 十二、流程控制结构 数据库的好处 1.持久化数据到本地 2.可以实现结构化查询,方便管理 数据库相关概念 1、DB:数据库,保存一组有组织的数据的容器 2、DBMS:数据库管理系统,又称为数据库软件(产品),用于管理DB中的数据 3、SQL:结构化查询语言,用于和DBMS通信的语言 数据库存储数据的特点 1、将数据放到表中,表再放到库中 2、一个数据库中可以有多个表,每个表都有一个的名字,用来标识自己。表名具有唯一性。 3、表具有一些特性,这些特性定义了数据在表中如何存储,类似java中 “类”的设计。 4、表由列组成,我们也称为字段

Mysql中的锁机制详解

删除回忆录丶 提交于 2020-01-11 14:33:11
原文: MySQL中的锁(表锁、行锁,共享锁,排它锁,间隙锁) 作者: 唐大麦 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除传统的 计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一 个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。本章我们着重讨论MySQL锁机制 的特点,常见的锁问题,以及解决MySQL锁问题的一些方法或建议。 Mysql用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。这些锁统称为悲观锁(Pessimistic Lock)。 MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最 显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。 表级锁: 开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁: 开销大,加锁慢;会出现死锁

C#综合揭秘——细说事务

天涯浪子 提交于 2020-01-10 17:57:29
引言 其实事务在数据层、服务层、业务逻辑层多处地方都会使用到,在本篇文章将会为大家一一细说。 其中前面四节是事务的基础,后面的三节是事务的重点,对事务有基础的朋友可以跳过前面四节。 文章有错漏的地方欢迎各位点评。 目录 一、事务的定义 二、事务管理器 三、在ADO.NET中实现事务 四、隐式事务 TransactionScope 五、在WCF中实现事务 六、嵌套式事务 七、异步事务 一、事务的定义 所谓事务,它是一个操作集合,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。典型的例子就像从网上银行系统的帐户A转帐到帐户B,它经过两个阶段:1.从帐户A取出款项。2.把款项放入帐户B中。这两个过程要么同时成功,要么同时失败,这一系列的操作就被称为事务性(Transactional)操作。 在一个事务性操作的环境下,操作有着以下的4种特性,被称为ACID特性 原子性(Atomicity) 当事务结束,它对所有资源状态的改变都被视为一个操作,这些操作要不同时成功,要不同时失败   一致性(Consistency) 操作完成后,所有数据必须符合业务规则,否则事务必须中止 隔离性(Isolation) 事务以相互隔离的方式执行,事务以外的实体无法知道事务过程中的中间状态 持久性(Durable) 事务提交后,数据必须以一种持久性方式存储起来 回到目录 二、事务管理器

【巨杉数据库SequoiaDB】巨杉Tech | SequoiaDB 分布式事务实现原理简介

情到浓时终转凉″ 提交于 2020-01-10 17:40:21
1 分布式事务背景 随着分布式数据库技术的发展越来越成熟,业内对于分布式数据库的要求也由曾经只用满足解决海量数据的存储和读取这类边缘业务向核心交易业务转变。分布式数据库如果要满足核心账务类交易需求,则其需要完善分布式事务,向传统关系型数据库看齐。即分布式事务的实现也需要像传统关系型数据库的事务一样满足事务的标准要求及定义,即ACID特征。 分布式数据库的数据是进行多机器多节点分散存储的,这样的存储架构为实现分布式事务带来了极大的难度。数据事务操作时,事务操作会结合数据分布情况,到不同的存储位置上去执行,而这个存储位置位于网络中的不同机器的不同磁盘上。 2 事务基本概念 2.1 事务使用场景 银行应用是一个经典案例,可以解释事务应用的必要性。假设银行数据库有两张表,支票账户表(check)和存款账户表(save)。现在要从LiLei的支票账户里转账200元到她的存款账户,那么需要至少完成3步操作: 检查支票存款账户的余额是否大于200元; 从支票存款账户余额中减去200元; 在存款账户余额中增加200元; 所有的操作被打包在一个事务里执行,如果某一步失败,就回滚所有已完成步骤。事务操作一般用 START TRANSACTION 语句开始一个事务,用 COMMIT 语句提交整个事务,永久地修改数据,或者用 ROLLBACK 语句回滚整个事务,取消已做的修改。事务SQL操作样例如下:

mysql事务

China☆狼群 提交于 2020-01-10 17:37:51
事务的概念 事务是一种机制,一个操作序列,包含了一组数据库操作命令,并且把所有命令作为一个整体一起想系统提交或撤销操作请求, 即这一组数据库命令要么都执行,要么都不执行,事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时, 事务是最小的控制单元,事务适用于用户同时操作数据库系统的场景,如银行,保险公司 以及证券交易系统等,通过事务的整体以保证数据的一致性,事务是保证了一组操作的平稳性和可预测性的技术。 事务的四大特性(ACID) 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 原子性(Atomicity )   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。 一致性(Consistency)   一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。   拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 隔离性(Isolation )   隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰