事务隔离级别

mysql之事务

早过忘川 提交于 2020-02-29 19:23:52
mysql事务简单来说就是数据库的数据进行一系列的操作。例如insert,delete等等,而这些语句组成的对数据库的操作就是事务。 mysql事务有4大特性ACID:原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。 原子性(Atomicity):一个事务的操作要不全部完成,要不全部不完成。不会结束在某个环节。事务会在发生错误时回滚(rollback)到事务前状态。 一致性(Consistency):在事务开始前和结束后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合数据库表预设的规则。包含资料精确度,串联型等等。 隔离性(Isolation):数据库允许多个并发事务同时对数据进行读取和修改的能力。隔离性可以防止多个事务并发执行时由于交叉执行导致数据的不一致。 持久性(Durability):事务在提交之后,其修改的数据将永久保留在数据库中。 事务控制 使用事务功能也只能是支持事务的引擎才可以。 启动:START TRANSACTION 或者begin 提交:COMMIT 回滚:ROLLBACK mysql默认的是自动提交功能,也就是说在使用insert,delete,update的时候,执行一条,提交一条。 如果操作取消的话,我们还将一条条的删除。事务就是解决这一问题

事务的四大特性

不打扰是莪最后的温柔 提交于 2020-02-29 15:48:56
1. 事务的四大特性 事务具有4个基本特征,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID ① 原子性 事务的原子性是指事务必须是一个原子的操作序列单元。事务中包含的各项操作在一次执行过程中,只允许出现两种状态之一,要么都成功,要么都失败 任何一项操作都会导致整个事务的失败,同时其它已经被执行的操作都将被撤销并回滚,只有所有的操作全部成功,整个事务才算是成功完成 ② 一致性(Consistency) 事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处以一致性状态。 比如:如果从A账户转账到B账户,不可能因为A账户扣了钱,而B账户没有加钱 ③ 隔离性 事务的隔离性是指在并发环境中,并发的事务是互相隔离的,一个事务的执行不能被其它事务干扰。也就是说,不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间。 一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务是不能互相干扰的 ④ 持久性(Duration) 事务的持久性是指事务一旦提交后,数据库中的数据必须被永久的保存下来。即使服务器系统崩溃或服务器宕机等故障。只要数据库重新启动,那么一定能够将其恢复到事务成功结束后的状态 在事物进行过程中,未结束之前

数据库

我怕爱的太早我们不能终老 提交于 2020-02-29 11:08:53
一、 mysql 安装与介绍 (一) 概念介绍 数据库 : 存储数据的仓库。对数据进行存储,并且提供增、删、改、查的数据操作。 数据库建模:使用数据库来表达业务和业务的关系,数据建模成功与否决定了项目 的成败。 业务逻辑:实体业务之间的关系,比如 : 养殖场,猪和饲养员的关系。 事务: 事务:是作为一个单元的一组有序的数据库操作,如果组当中所有操作都成功,则事务执行成功,如果有一个操作执行失败,则事务执行失败,回滚操作。 事务的特性: 原子性:事务包含的所有操作全部成功,要么全部失败回滚;成功必须完全应 用到数据库,失败则不能不能对数据库产生影响。 一致性:事务执行前和执行后必须处于一致状态。 隔离性:当多用户并发访问数据库时候,数据库为每一个用户开启一个事务, 这个事务不被其他事务操作干扰,多个并发事务直接互相隔离。 持久性:一旦事务被提交了,那么数据库当中的数据改变是永久性的,即便数 据库系统发生故障,也不会丢失事务操作。 事务的回滚: 事务是用户定义的一组数据库操作。这些操作要么全做,要么全不做,回滚会自动是将该事务完成的操作撤销。 数据库提供的四种隔离等级: 如果我们不考虑隔离性,会导致 脏读 在一个事务处理的过程当中读取另一个没有提交的事务当中的数据,然后使用了数据。 A 向 B 转账 100 元, A 通知 B 查看账户, B 发现已经到账,转账操作过程当中

浅谈Spring事务隔离级别

僤鯓⒐⒋嵵緔 提交于 2020-02-29 10:54:03
一、Propagation (事务的传播属性) Propagation :  key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。 1: PROPAGATION_REQUIRED 加入当前正要执行的事务不在另外一个事务里,那么就起一个新的事务 比如说,ServiceB.methodB的事务级别定义为PROPAGATION_REQUIRED, 那么由于执行ServiceA.methodA的时候, ServiceA.methodA已经起了事务,这时调用ServiceB.methodB,ServiceB.methodB看到自己已经运行在ServiceA

Python 第四十五章 MySQL 内容回顾

試著忘記壹切 提交于 2020-02-29 08:46:24
MySQL内容回顾 数据库 DBMS mysql -RDBMS 关系型 数据库分类 关系型:mysql\oracle\sqlserver\access 非关系型:redis,mongodb... 修改密码: mysql>set password for root@'127.0.0.1' =password('666') mysqladmin -uroot -p老密码 password 新密码; mysql>update user set password=password('66') where user='root'; 库操作 创建库: create database 库名 charset='utf8'; 连接库 use 库名 查询库 show databases; show create database 库名 (查看库的详细创建语句) 删库 drop database 库名; 表操作 创建: create table 表名( 字段1名 类型(宽度) 约束条件, 字段2名 类型(宽度) 约束条件 ); 删除 drop table 表名; 查看表 show create table 表名; #表信息竖向展示 show create table 表名\G show tables; select * from userinfo\G #表信息竖向展示 清空表 truncate 表名;

JAVA中的事务,事务模块总结

不想你离开。 提交于 2020-02-28 13:12:42
大家好,这是一个为了梦想而保持学习的博客。这是第二篇文章,分享一下我对【事务】的理解​。文章的风格会一直保持问答的方式讲述,这是我个人喜欢的一种风格,也是相当于模拟面试。 什么是事务? 简单的来说,一条SQL执行或则几条SQL一起执行时,我们希望这个SQL要么执行成功后提交,要么执行失败后回滚,这是我们最直观的理解。在上面这句话中,就包含了事务的几个必要属性: "执行成功后提交",意味着持久性;"执行失败后回滚",意味着一致性;"要么成功,要么失败",意味着原子性 。他们的具体理解如下: 原子性(A) :事务要么执行成功,要么执行失败,没有第三种状态。 一致性(C) :事务执行的前后数据要一致,也就是说执行成功后数据的更改和预期一致,执行失败需要回滚到更改前数据。 隔离性( I ) :多个事务并发执行时,相互隔离,互不影响。 持久性(D ):事务提交后,对数据的更改是永久性的。也就说,哪怕数据库崩溃了,那些数据也是可以被恢复过来的。 事务是如何实现的? 事务的实现分为两个部分,一个是数据库底层的事务实现,另外一个是基于Spring去实现事务管理。这里主要是讲数据库(mysql-innodb)层面的实现。下面会围绕上面所说的ACID属性来讲mysql的底层实现。 redo日志与原子性、持久性的关系 redo日志是mysql-innodb底层的一个日志文件

事务隔离级别的遇到的坑

喜欢而已 提交于 2020-02-28 07:32:20
有以下四种隔离级别 1.READ-UNCOMMITTED(读取未提交内容)级别 2.READ-COMMITTED(读取提交内容)级别 3.REPEATABLE-READ(可重读)级别 4.SERIERLIZED(串行化) 。 如果在事务管理器中未设置事务隔离级别,就默认使用数据库的隔离级别,oracle为read_commit(读已提交) public class test { @Autowired private Dao dao; @Transactional(value = "thunderJpaTransactionManager", rollbackFor = Exception.class) public boolean saveAndReadTest() { User user = new User(); user.setId(1); dao.save(user); User user = dao.findById(1); //因为处于同一个事务中,所以是可以实时获取的 ...... } } 同一事务中,是可以读取未提交的数据 那么什么时候是不同的事务呢? 答:A线程调用saveAndReadTest()方法,B线程调用saveAndReadTest()方法,虽然调用的是相同的方法,但是事务是不同的,所以B线程中无法读取A中未提交的数据 我们可以通过dao

事务并发机制

本秂侑毒 提交于 2020-02-27 14:30:37
注:原文转自 https://blog.csdn.net/Yuncoco/article/details/92801100 一、 事务4个特性ACID 原子性(Atomic),事务必须是原子工作单元; 一致性(Consistent),事务在完成时,必须使所有的数据都保持一致状态。 隔离性(Insulation),由事务并发所作的修改必须与任何其它并发事务所作的修改隔离。 持久性(Duration),事务完成之后,它对于系统的影响是永久性的。 二、事务并发 通常为了获得更好的运行性能,各种数据库都允许多个事务同时运行,这就是事务并发。 三、 隔离机制 当并发的事务访问或修改数据库中相同的数据(同一行同一列)时,通常需要采取必要的隔离机制。 解决并发问题的途径是什么? 答案是:采取有效的隔离机制。 怎样实现事务的隔离呢?隔离机制的实现必须使用锁 四、事务并发带来的问题 以下事务都是发生在毫秒级的时间差 JPA只能处理第一、二类丢失更新,其他3种必须由数据库自己处理 1.第一类丢失更新:(在秒杀场景会出现问题) 库存是1件 当事务A和事务B同时修改某行的值, 1.事务A将数值改为0并提交,购买了一件 2.事务B将数值改为0并提交,也购买了一件。这时数据的值为0,事务A所做的更新将会丢失。(相当于就卖出去2件商品) 解决办法:对行加锁,只允许并发一个更新事务。(JPA中的悲观锁,乐观锁)

Spring事务失效的原因总结

纵饮孤独 提交于 2020-02-27 13:23:29
用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景? 不见得总结全,但希望可以帮忙有需要的人。 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、没有被 Spring 管理 如下面例子所示: // @Service public class OrderServiceImpl implements OrderService { @Transactional public void updateOrder ( Order order ) { // update order } } 如果此时把 @Service 注解注释掉,这个类就不会被加载成一个 Bean,那这个类就不会被 Spring 管理了,事务自然就失效了。 3、方法不是 public 的 以下来自 Spring 官方文档: When using proxies,

Spring5学习(六)Spring 事务

家住魔仙堡 提交于 2020-02-27 08:27:11
Spring 事务 1. 事务 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。 事务是恢复和 并发控制 的基本单位。 2. 为什么要事务 事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。 3. 事务的4个特性(ACID) 事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID特性 。 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的操作要么都做,要么都不做。 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。 持久性(durability)。指一个事务一旦提交