事务隔离级别

锁模块

筅森魡賤 提交于 2020-01-26 20:06:34
锁模块的常见问题 1、MyISAM和InnoDB关于锁方面的区别是什么? 2、数据库事务的四大特性? 3、事务隔离级别以及各级别下的并发访问问题? 4、InnoDB可重复读隔离级别下如何避免幻读? 5、RC、RR级别下的InnoDB的非阻塞读如何实现? 1、MyISAM和InnoDB关于锁方面的区别是什么? MyISAM默认用的是表级锁,不支持行级锁 InnoDB默认用的是行级锁,也支持表级锁 2、数据库事务的四大特性? ACID 原子性(Atomic) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 3、事务隔离级别以及各级别下的并发访问问题? 事务并发访问引起的问题以及如何避免 1) 更新丢失----mysql所有事务隔离级别在数据库层面上均可避免 如下图,对同一个账号进行操作 2) 脏读----READ-COMMITED 事务隔离级别以上可避免 查询事务的隔离级别 SELECT @@tx_isolation; 设置事务的隔离级别 SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 3) 不可重复读----REPEATABLE-READ 事务隔离级别以上可避免 4)幻读----SERIALIZABLE 事务隔离级别可避免 来源: https://www.cnblogs

对事务的特性ACID的理解

家住魔仙堡 提交于 2020-01-26 17:40:57
对事务的特性ACID的理解 数据库的事务必须具备ACID特性,ACID是指 Atomicity(原子性)、Consistensy(一致性)、Isolation(隔离型)和Durability(持久性)的英文缩写。 1、 原子性(Atomicity ) 事务包装的一组sql ,要么都执行成功,要么都失败。这些操作是不可分割的。 2、 一致性(Consistency ) 数据库的数据状态是一致的。 事务的成功与失败,最终数据库的数据都是符合实际生活的业务逻辑。一致性绝大多数依赖业务逻辑和原子性。 3、 持久性:( Durability ) 事务成功提交之后,对于数据库的改变是永久的。哪怕数据库发生异常,重启之后数据亦然存在。 4、 隔离性(Isolation ) 一个事务的成功或者失败对于其他的事务是没有影响。2 个事务应该相互独立。 事务的隔离级别 如果不考虑事务的隔离性,由于事务的并发,将会出现以下问题: 1、脏读 -- 最严重,杜绝发生 2、不可重复读 3、幻读(虚读) 脏读:指一个事务读取了另外一个事务 未提交的数据。 一个事务读取了另一个事务没有提交的数据,非常严重。应当尽量避免脏读。 不可重复读:在一个事务内多次读取表中的数据,多次读取的结果不同。 幻读(虚读) 隔离级别:如何解决问题 l 数据库规范规定了4种隔离级别,分别用于描述两个事务并发的所有情况。 read

MySQL事务和锁的相关概念

断了今生、忘了曾经 提交于 2020-01-26 11:38:47
大家肯定都打过游戏,对于一个游戏通关来说,通了就是通了,没通就是没通。 那对于事务来讲,一组 SQL 语句全部执行成功才是成功,只要有一个 SQL 语句执行失败,整个就崩掉了。 1)事务的概念 2)事务的特性 3)事务的隔离级别 4)锁 5)一些事务相关的 SQL 语句 6) MySQL 中常使用的引擎 1、什么是事务 事务是有一条或者是多条对数据库操作的SQL组成的一个不可分割的单元, 只有当事务中的所有的操作都正常执行时,整个事务才提交给数据库 1)事务是一组SQL语句的执行,要么全部执行成功,要么全部执行失败, 不能出现部分成功和失败,保证原子操作 2)事务中所有的数据执行成功,才能提交( commit )事务,把结果写入磁盘 3)事务在执行过程中,有的SQL出现了错误,那么事务必须回滚( rollback ) 到最初的状态 当一个事务正确提交后,那个值才会刷新到磁盘上。 2、事务的一些性质 事务的ACID特征: 一个事务必须满足以下4个特征: A(Atomic):原子性 事务是一个不可分割的整体,事务必须具有原子特性,当数据发生变更时,要么全部成功,要么全部失败,不存在部分成功和失败 通关与未通关 C(Consistency):一致性 一个事务的执行前后,数据库中的数据必须保持一致性的特征。 I(Isolation):隔离性 当两个或者多个事务进行并发操作时

148复习前一天的内容

淺唱寂寞╮ 提交于 2020-01-26 09:51:05
一、含义 事务:一条或多条sql语句组成一个执行单位,一组sql语句要么都执行,要么都不执行 二、特点(ACID) A 原子性:一个事务是不可再分割的,要么都执行,要么都不执行 C 一致性:我们的数据是准确的,完整的,可靠的。一个事务可以使数据从一个一致状态,切换到另一个一致状态 I 隔离性:一个事务不受其他事务的干扰,多个事务互相隔离(通过设置隔离级别来隔离) D 持久性:一个事务一旦提交了,则永久的持久化到本地 三、事务的使用步骤 了解: 隐式(自动)事务:没有明显的开启和结束,本身就是一条事务可以自动提交,比如insert、update、delete 显示事务:需要手动提交,具有明显的开始和结束 使用显示事务: ①开启事务 set autocommit=0; 【start transaction;】 --可以省略 ②编写一组逻辑sql语句 注意:sql语句支持的是insert、update、delete 设置回滚点: savepoint 回滚点名; ③结束事务 提交:commit; 回滚:rollback; 回滚到制定的地方:rollback to 回滚点名; 四、并发事务、 1.事务的并发问题是如何发生的? 多个事务 同时 操作 同一个数据库的相同数据时 2.并发问题都有哪些? 脏读:一个事务读取了其他事务还没有提交的数据,读到的是其他事务”更新“的数据 不可重复度

spring整合mybatis

允我心安 提交于 2020-01-26 08:18:47
spring整合mybatis的applicationContext.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http:

事务并发的可能问题与其解决方案

戏子无情 提交于 2020-01-26 02:47:01
一、事务并发的问题 这些问题可以归结为5类,包括3类数据读问题( 脏读、 不可重复读和 幻象读)以及2类数据更新问题( 第一类丢失更新和 第二类丢失更新) 脏读(dirty read) A事务读取B事务尚未提交的更改数据,并在这个数据的基础上操作。如果恰巧B事务回滚,那么A事务读到的数据根本是不被承认的。来看取款事务和转账事务并发时引发的脏读场景: 在这个场景中,B希望取款500元而后又撤销了动作,而A往相同的账户中转账100元,就因为A事务读取了B事务尚未提交的数据,因而造成账户白白丢失了500元。在Oracle数据库中,不会发生脏读的情况。 不可重复读(unrepeatable read) 不可重复读是指 A事务读取了B事务已经提交的更改数据。 假设A在取款事务的过程中,B往该账户转账100元,A两次读取账户的余额发生不一致: 这个就我自己觉得问题不大,好像也并没有影响什么。 幻象读(phantom read) A事务读取B事务提交的新增数据,这时A事务将出现幻象读的问题。幻象读一般发生在计算统计数据的事务中,举一个例子,假设银行系统在同一个事务中,两次统计存款账户的总金额,在两次统计过程中,刚好新增了一个存款账户,并存入100元,这时,两次统计的总金额将不一致: 如果新增数据刚好满足事务的查询条件,这个新数据就进入了事务的视野,因而产生了两个统计不一致的情况。 不可重复读 和

springmvc常用注解和spring事务的四大特性、事务的传播特性

て烟熏妆下的殇ゞ 提交于 2020-01-26 01:59:30
springmvc常用注解和spring事务的四大特性、事务的传播特性 #1.springmvc常用注解 @Configuration把一个类作为一个IoC容器,它的某个方法头上如果注册了@Bean,就会作为这个Spring容器中的Bean。 @Scope注解 作用域 @Lazy(true) 表示延迟初始化 @Service用于标注业务层组件、 @Controller用于标注控制层组件(如struts中的action) @Repository用于标注数据访问组件,即DAO组件。 @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。 @Scope用于指定scope作用域的(用在类上) ---------------jsr250---- @PostConstruct用于指定初始化方法(用在方法上) @PreDestory用于指定销毁方法(用在方法上) @Resource 默认按名称装配,当找不到与名称匹配的bean才会按类型装配。 @DependsOn:定义Bean初始化及销毁时的顺序 @Primary:自动装配时当出现多个Bean候选者时,被注解为@Primary的Bean将作为首选者,否则将抛出异常 @Autowired 默认按类型装配,如果我们想使用按名称装配,可以结合@Qualifier注解一起使用。如下: @Autowired

InnoDB中的MVCC

断了今生、忘了曾经 提交于 2020-01-25 15:30:44
InnoDB的MVCC机制 InnoDB是一个多版本的存储引擎,它保存着已经改变的行的旧版本的信息,用来支持事务的性质例如并发和回滚。这些信息存储在一个称为回滚段(roolback segment)的数据结构中。InnoDB使用回滚段中的信息来执行事务回滚所需的撤销操作。还通过这些信息来构建行的早期版本,以便进行一致性读操作。一致性读是一种增强并发性的强大技术,允许查询在不等待其他事务释放锁的情况下继续进行。 一、InnoDB的行结构 innodb存储的最基本row中包含一些额外的存储信息 DATA_TRX_ID,DATA_ROLL_PTR,DB_ROW_ID,DELETE BIT 其中: 1、6字节的DATA_TRX_ID 标记了最新更新这条行记录的transaction id,每处理一个事务,其值自动+1。 2、7字节的DATA_ROLL_PTR 指向当前记录项的rollback segment的undo log记录,找之前版本的数据就是通过这个指针。 3、6字节的DB_ROW_ID,当由innodb自动产生聚集索引时,聚集索引包括这个DB_ROW_ID的值,否则聚集索引中不包括这个值 4、DELETE BIT位用于标识该记录是否被删除,这里的不是真正的删除数据,而是标志出来的删除。真正意义的删除是在commit的时候。 二、撤销日志 回滚段的undo

面试常考的mysql知识点

混江龙づ霸主 提交于 2020-01-25 14:44:28
秋招之后,部门又来了好多小鲜肉,其中有部分同学是没有用过MySQL的,我把自己以前做过的笔记又重新整理了一番,希望能够对新同学有帮助! 什么是DML、DDL、DCL? DML (data manipulation language): 它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是 用来对数据库里的数据进行操作的语言 DDL (data definition language):主要的命令有CREATE、ALTER、DROP等, DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用 DCL (Data Control Language):是 数据库控制功能。 是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句 。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL TCL (Transaction Control Language): 事务控制语言 ,包括:set transaction\rollback\savepoin MySQL常用命令 DDL 创建数据库 create database 数据库名; 查看数据库列表 show databases;

用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景?

不羁岁月 提交于 2020-01-25 03:42:12
1. 数据库引擎不支持事务 这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB。 根据 MySQL 的官方文档: https://dev.mysql.com/doc/refman/5.5/en/storage-engine-setting.html 从 MySQL 5.5.5 开始的默认存储引擎是:InnoDB,之前默认的都是:MyISAM,所以这点要值得注意,底层引擎不支持事务再怎么搞都是白搭。 2. 数据源没有配置事务管理器 @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } 如上面所示,当前数据源若没有配置事务管理器,那也是白搭! 3. 没有被 Spring 管理 如下面例子所示: // @Service public class OrderServiceImpl implements OrderService { @Transactional public void updateOrder(Order order) { // update order } }