事务隔离级别

JDBC总结——事务

本秂侑毒 提交于 2020-02-19 05:24:16
文章目录 事务 一、事务的基本介绍 1、概念 2、操作 3、操作实例 4、MySQL数据库中默认自动提交 二、事务的四大特征 三、事务的隔离级别 1、概念 2、存在的问题 3、隔离级别 四、Jdbc事务控制 1、概述 2、控制事务的API: 3、核心代码 事务 一、事务的基本介绍 1、概念 如果包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。 2、操作 ① 开启事务: start transaction; ② 回滚: rollback; ③ 提交: commit; 3、操作实例 account.sql -- 创建account表 CREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT ; NAME VARCHAR ( 10 ) , balance DOUBLE ) ; -- 添加数据 INSERT INTO account ( NAME , balance ) VALUES ( 'zhangsan' , 1000 ) , ( 'lisi' , 1000 ) ; SELECT * FROM account ; UPDATE account SET balance = 1000 ; --张三给李四转账500元 --0.开启事务 START TRANSACTION ; --1.张三账户-500

数据库事务四大特性、隔离级别

拈花ヽ惹草 提交于 2020-02-18 18:05:53
【以转账为例】 事务 事务是指满足ACID的一组操作,可以通过Commit提交一个事务,也可以使用Rollback进行回滚。 ACID 1.原子性(Atomicity) 事务被视为不可分割的最小单元,事务的所有操作要么全部提交成功,要么全部失败回滚。 2.一致性(Consisitency) 数据库在事务执行前后都保持一致性状态。即转账前后,两个人账户总金额不变。 3.隔离性(Isolation) 根据隔离级别,一个事物所作的修改对于其他事务来说是不确定的。 4.持久性(Durability) 一旦事务提交,则其所作的修改将会永远保存到数据库中。 隔离级别 mysql默认的隔离级别是可重复读。 下面的代码所运行的两个事务需要在两个不同的session中执行,开启两个客户端。 1.读未提交 READ UNCOMMITTED 读未提交:事务中的修改,即使没有提交,对其他事务也是可见的。 事务1: 1 set session transaction isolation level read uncommitted; 2 3 start transaction; 4 update user set money = money - 100 where id = 1; 5 update user set money = money + 100 where id = 2; 6 commit;

分布式事务(理论+实战)

你离开我真会死。 提交于 2020-02-18 13:42:37
分布系统中,如何保证数据的一致性、原子性,分布式事务。分布式事务分为两大类,柔性事务、刚性事务。 一、方法论篇 分布式事务主要分为两部分,刚性事务和柔性事务。刚性事务主要针对DB层面,严格保证事务的原子性要么都成功,要么执行失败,全部回滚。 柔性事务,相对于刚性事务来的,为了保证DB的利用率,以及系统的吞吐量,不会长时间锁定DB资源,在事务执行失败之后不会进行回滚,而是采用补偿的方式保证数据的最终一致性,所以柔性事务又叫补偿型事务。先来介绍刚性事务。 1.1刚性事务 X/Open XA 协议, 最早的分布式事务模型是 X/Open 国际联盟提出的 X/Open Distributed Transaction Processing(DTP)模型,也就是大家常说的 X/Open XA 协议,简称XA 协议。 名词解释: 其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务开始和结束)并访问事务边界内的资源。 资源管理器(Resource Manager,简称RM):Rm管理计算机共享的资源,许多软件都可以去访问这些资源,资源包含比如数据库、文件系统、打印机服务器等。 事务管理器(Transaction Manager ,简称TM):负责管理全局事务,分配事务唯一标识,监控事务的执行进度,并负责事务的提交、回滚、失败恢复等。 操作过程 第一阶段

事务的由来以及aid保证一致性(状态总是正确的)

我怕爱的太早我们不能终老 提交于 2020-02-17 15:03:54
首先,我们需要搞清楚为什么会出现事务. Transactions are not a law of nature; they were created with a purpose, namely to simplify the programming model for applications accessing a database. By using transactions, the application is free to ignore certain potential error scenarios and concurrency issues, because the database takes care of them instead (we call these safety guarantees). 这句话的大体含义就是,事务的产生,其实是为了当应用程序访问数据库的时候,事务能够简化我们的编程模型,不需要我们去考虑各种各样的潜在错误和并发问题.可以想一下当我们使用事务时,要么提交,要么回滚,我们不会去考虑网络异常了,服务器宕机了,同时更改一个数据怎么办对吧? 题外话: 因此事务本质上是为了应用层服务的.而不是伴随着数据库系统天生就有的.其次,说道一致性,很遗憾,这个词在不同的环境下有着不同的含义,被极大的滥用了,导致很难理解:1. 多副本的一致性2.

浅谈Spring(三)

最后都变了- 提交于 2020-02-17 11:24:55
Spring的事务管理 什么是Spring的事务管理?   在实际开发中,操作数据库时都会牵扯到事务管理问题,为此Spring提供了专门用于事务处理的API。Spring的事务管理简化了传统的事务管理流程,并且在一定程度上减少了开发者的工作量。    事务管理的核心接口: 1. Platform TransactionManager   该接口提供了3个事务操作的方法,具体如下: TransactionStatus getTransaction(TransactionDefinition definition):用于获取事务状态的信息 void commit(TransactionStatus status):用于提交事务 void rollback(TransactionStatus status):用于回滚事务 2. TransactionDefinition   该接口提供了5个事务操作的方法,具体如下: String getName():获取事务对象名称 int getIsolationLevel():获取事务的隔离级别 int getPropagationBehavior():获取事务的传播行为 int getTimeout():获取事务的超时时间 boolean isReadOnly():获取事务是否只读 3. TransactionStatus  

05. redis事务

谁说我不能喝 提交于 2020-02-17 08:03:25
目录 Redis 事务 事务 1. 命令有序 2. 始终原子 开启使用事务 Redis事务中出现错误 1. EXEC前的错误 2. EXEC后的错误 为什么出错了不支持roll backs? Redis的乐观锁实现check-and-set 小结 Redis 事务 Redis操作时支持事务的。事务具有原子性atomic,包含在事务中的操作要么都执行成功,要么都执行失败。但是redis不支持回滚,但是可以在测试开发环节避免错误操作。可以说原子性上是半支持的,看后面原因。 很多时候我们需要进行事务操作。 翻译官档: https://redis.io/topics/transactions 实际操作:python版使用参考 https://github.com/7Edge/redis-demo/blob/master/redis_pipeline.py 事务 MULTI, EXEC, DISCARD 和 WATCH 操作都是redis事务的基础操作。这些操作可以让一组操作看作一个操作原子执行。之所以能做到,是因为一下两个重要的保障: 1. 命令有序 在事务中的所有命令都是有序的,且执行是顺序执行的。当另一个客户端连接发生错误,是不可能影响到当前正在执行的事务的。这点就保证了命令执行时是相互隔离的操作。因为是单线程,且redisserver利用i/o多路复用来处理并发连接。 2. 始终原子

MySQL锁与事务隔离级别

主宰稳场 提交于 2020-02-16 22:39:21
1、概述 (1) 锁的定义 锁是计算机协调多个进程或线程并发访问某一资源的机制。 在数据库中,除了传统的计算资源(如CPU、RAM、IO等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。 (2) 锁的分类 从性能上分为 乐观锁 和 悲观锁 乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。 例子:① 在数据库的表中加一个version字段,用来记录每次修改数据的版本号,防止并发修改数据出错;② CAS原子类。 悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。 例子:synchronized关键字。 从对数据库操作的类型分为 读锁 和 写锁 (都属于悲观锁) 读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会互相影响。 写锁(排它锁):当前写操作没有完成前,它会阻断其他session的写锁和读锁。(session:数据库连接) 从对数据操作的粒度分为 表锁 和 行锁 。 2、表锁与行锁 (1) 表锁( 偏读 ) 表锁偏向MyISAM存储引擎 ,开销小,加锁快,无死锁

Innodb核心特性——事务

拟墨画扇 提交于 2020-02-16 18:18:49
Innodb核心特性——事务 一、什么是事务? 主要针对DML语句(update,delete,insert) 一组数据操作执行步骤,这些步骤被视为一个工作单元: 1)用于对多个语句进行分组 2)可以在多个客户机并发访问同一个表中的数据时使用 所有步骤都成功或都失败 1)如果所有步骤正常,则执行 2)如果步骤出现错误或不完整,则取消 二、事务通俗的理解 伴随着“交易”出现的数据库概念。 我们理解的“交易”是什么? 1)物与物的交换(古代) 2)货币现金与实物的交换(现代1) 3)虚拟货币与实物的交换(现代2) 4)虚拟货币与虚拟实物交换(现代3) 数据库中的“交易”是什么? 1)事务又是如何保证“交易”的“和谐”? 2)ACID # 10.0.0.51的第一个窗口 # 1.创建一个转账表 mysql> use test mysql> create table jiaoyi; mysql> insert into jiaoyi values('msy',1000), mysql> select * from jiaoyi; +------+-------+ | name | money | +------+-------+ | msy | 1000 | | hjm | 1000 | +------+-------+ # 2.开始事务 mysql> begin; # 3.更改数据

mysql事务

☆樱花仙子☆ 提交于 2020-02-16 18:13:22
什么是事务 一系列有序的数据库操作: 要么全部成功 要么全部回退到操作前状态 中间状态对其他连接不可见 事务的基本操作 基本操作 说明 start transaction; 开始事务 commit; 提交(全部完成) rollback; 回滚(回到初始状态) 图中便是数据库中的事务操作;及 开始事务-->SQL操作-->commit/rollback; savepoint,保存点,在事务回滚时,可以回滚到保存点; 而提交只能全部提交不能仅提交保存点; savepoint savepoint_name; rollback to savepoint_name; commit; 事务开始也可以用 begin;或者 start transaction; 清空表数据: mysql> select * from ttt; +---+------+------+ | a | b | c | +---+------+------+ | 1 | 1 | 1 | +---+------+------+ 1 row in set (0.00 sec) mysql> truncate table ttt; Query OK, 0 rows affected (0.01 sec) mysql> select * from ttt; Empty set (0.00 sec) 当多个连接同时连在一个数据库中时

【事务, 锁】

一世执手 提交于 2020-02-16 17:11:34
事务特性 ACID A:atom原子性 C:consistency 一致性 I:isolation 隔离性 D:durability 持久性 隐式提交 保存点 隔离性有四个级别 右边的第一次读和第二次读的不一样。这就是不可重复读。 右边第一次查到12条记录,第二次查到13条记录。这叫幻读。 以上隔离性四个级别都是sql标准。 mysql在实现sql标准时,再可重复读级别已经解决幻读的情况。 来源: CSDN 作者: 嘤嘤怪QQQ 链接: https://blog.csdn.net/zj20165149/article/details/104342363