事务隔离级别

事务的概念是什么,有哪些基本属性?

北慕城南 提交于 2019-12-03 20:37:16
数据库管理系统 - 逻辑单位-有限的操作序列! ACID属性: Atomicity : 原子性 Consistency:一致性 Isolation:隔离线 Durability:持久性 事务有哪几种隔离级别,请从弱到强分别类举说明? 1.default:(默认) 默认隔离级别,使用数据库默认的事务隔离级别 2.read_uncommitted:(读未提交) 这是事务最低的隔离级别,他允许另外一个事务可以看到这个事务未提交的数据,这种隔离级别会产生脏读,不可重复读和幻读 3.read_committed(读已提交) 保证一个事务修改的数据提交后才能被另外一个事务读取,另外一个事务不能读取该事务未提交的数据.这种事务隔离级别可以避免脏读,但是可能会出现不可重复读和幻读 4.repeatable_read(可重复读) 这种事务级别可以防止脏读,不可重复读.但是可能出现幻读.他除了保证一个事务不能读取另一个事务未提交的数据外,还保证了不可重复读 5.Serializable 串行化 这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。防止了脏读、不可重复读、幻读 在事务的并发操作中,可能出现的情况是哪些? 脏读,不可重复读,幻读 1.dirty reads 脏读 一个事务正在对数据进行更新操作,但是更新还未提交,另一个事务这时也来操作这组数据,并且读取了前一个事务还未提交的数据

需要了解的spring事务特性

此生再无相见时 提交于 2019-12-03 20:30:17
一、spring事务的四大特征:   原子性:一个事务中所有的操作都是一个整体,要么都成功,要么都失败。   一致性:事务的执行的前后数据的完整性保持一致。   隔离性:一个事务在执行的过程中,不应该受到其他事务的干扰。   持久性:事务提交后对数据库的修改是永久的。   原子性与一致性的区别:     原子性是保证最终结果的正确。     一致性是针对事务操作过程中数据的可见性,只有最初的数据和最终的数据对外可见,避免在“未提交读”的情况下造成脏读。 二、事务的五大隔离级别:   default:默认的事务隔离级别,使用数据库默认的数据隔离级别。MySQL默认的事务隔离级别是“可重复读(repeatable_read)”。   read_uncommitted:读未提交,一个事务可以操作另一个未提交的事务,可能会出现脏读、不可重复读、幻读。   read_committed:读已提交,一个事务只能操作另一个已经提交的事务,可能会出现不可重复读、幻读。   repeatable_read:可重复读,能够避免脏读,不可重复读,不能避免幻读。   serializable:串行化,隔离级别最高,消耗资源最低,代价最高,能够防止脏读, 不可重复读,幻读。   脏读:事务A读取到了事务B未提交的数据,此时如果事务B因为发生错误并执行回滚,那么事务A读到的数据就是脏数据。   不可重复读

数据库四种隔离级别

那年仲夏 提交于 2019-12-03 17:37:53
https://www.cnblogs.com/catmelo/p/8878961.html 起初隔离级别为read uncommitted 读未提交;a,b两个会话,分别开启两个事务,然后a向b转了500元钱,但a未提交该事务, 此时b查看,发现多了500.然后a回滚事务,b再查看账户,发现根本就没有多500.这便是 脏读 。脏读便是可以读取到另一个事务尚未提交的数据。 如果我们此时将隔离级别提升为read committed 读已提交,便可避免脏读。同样b两个会话,分别开启两个事务,然后a向b转了500元钱, 但a未提交该事务,此时b查看,依旧是原钱数. 但此时,如果a 提交事务,b再去查看,发现此时多了500,对b而言,在一个事务中,两次查询的结果不一致,这便是 不可重复读 。 如果我们此时将隔离级别提升为repeatable read 可重复读 ,可以避免脏读和不可重复读的发生。同样a 提交事务,b再去查看,发现 依旧是原钱数,b只能结束当前事务,在开启一个新事务,才能查询到数据的变化,这al便避免了不可重复读。 如果我们设置了 seriizable 串行化,就相当于锁表,某一时间内只允许一个事务访问该表。 在可重复读中,该sql第一次读取到数据后,就将这些数据加锁(悲观锁),其它事务无法修改这些数据,就可以实现可重复读了。但 这种方法却无法锁住insert的 数据

Mybaits 源码解析 (七)----- Select 语句的执行过程分析(下篇)(Mapper方法是如何调用到XML中的SQL的?)全网最详细,没有之一

99封情书 提交于 2019-12-03 17:08:26
我们上篇文章讲到了查询方法里面的doQuery方法,这里面就是调用JDBC的API了,其中的逻辑比较复杂,我们这边文章来讲,先看看我们上篇文章分析的地方 SimpleExecutor 1 public <E> List<E> doQuery(MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException { 2 Statement stmt = null; 3 try { 4 Configuration configuration = ms.getConfiguration(); 5 // 创建 StatementHandler 6 StatementHandler handler = configuration.newStatementHandler(wrapper, ms, parameter, rowBounds, resultHandler, boundSql); 7 // 创建 Statement 8 stmt = prepareStatement(handler, ms.getStatementLog()); 9 // 执行查询操作 10 return handler.<E

MySQL事务

心不动则不痛 提交于 2019-12-03 15:21:34
  在上一篇文章中我们介绍了事务的概念,还有事务的相关的特性和隔离属性。既然我们了解了事务是什么东西,那么事务是数据存储中怎么使用的呢,在这篇文章中我们就来看看事务在MySQL中的应用。   首先我们知道MySQL是一个关系型的数据库,MySQL支持多种存储引擎,其中InnoDB是支持事务的。接下来我们就看看在MySQL的InnoDB的存储引擎中事务的使用.   MySQL关于事务的主要命令有以下几个 START TRANSACTION;-- 开启事务 COMMIT;-- 提交事务 ROLLBACK;-- 回滚事务   假设我们在MySQL的数据库中存在以下InnoDB表: 表:test_table_a 字段 类型 id int name varchar(5)   MySQL有个事务开关语句用来设置当前会话中是否是默认提交事务的语句,在支持默认提交的情况下,即每个语句都会被当成一个事务,然后在执行单个语句的时候,会自动提交一个事务,默认情况下,MySQL的这个开关是开启的。 SET autocommit = {0 | 1}   在接下来例子中我们都会使用去主动开启一个事务,而不是使用MySQL的默认提交。   我们开启一个MySQL事务,插入数据,提交事务,再查出数据,可以看到我们的事务成功提交数据,并且在提交可以查出对应的数据。 START TRANSACTION;-- 开启事务

java-day23

只谈情不闲聊 提交于 2019-12-03 15:15:21
事务的四大特征:   1.原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。   2.持久性:当事务提交或回滚后,数据库会持久化的保存数据。   3.隔离性:多个事务之间,相互独立。   4.一致性:事务操作前后,数据总量不变。 事务的隔离级别   概念:多个事务之间隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。   存在问题     1.脏读:一个事务,读取到另一个事务中没有提交的数据。     2.不可重复读(虚读):在同一个事务中,两次读取到的数据不一样。     3.幻读:一个事务操作(DML)数据表中所有记录,另一个事务添加了一条数据,则第一个事务查询不到自己的修改。   隔离级别     1.read uncommitted:读未保存       产生问题:脏读、不可重复读、幻读     2.read committed:读已保存  (Oracle)       产生问题:不可重复读、幻读     3.repeatable read:可重复读  (MySQL默认)       产生问题:幻读     4.serializable:串行化       可以解决所有问题     注意:隔离级别从小到大安全性越来越高,但效率越来越低。     数据库查询隔离级别:       select @@tx

java-JDBC事务

耗尽温柔 提交于 2019-12-03 13:36:07
要么一起成功,要么都失败。 package com.ibeidiao.utils; import org.junit.Test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class Transaction { @Test public void transaction() throws SQLException { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = JDBCUtils.getConn(); conn.setAutoCommit(false); // 关闭事务自动提交 String sql = "update account set money=money-? where id = ?"; ps = conn.prepareStatement(sql); ps.setInt(1, 100); //第一个参数 ps.setInt(2, 1); //第二个参数 ps.executeUpdate(); int a = 10/0; // rs

事物的锁机制和七种传播行为

十年热恋 提交于 2019-12-03 13:21:52
一、锁   1、数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并 发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严重影响应用的正常执行。   2、在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两 种基本的锁类型来对数据库的事务进行并发控制。   3、死锁     (1)死锁的第一种情况 一个用户A 访问表A(锁住了表A),然后又访问表B;另一个用户B 访问表B(锁住了表B),然后企图访问表A;这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B才能继续,同样用户B要等用户A释放表A才能继续,这就死锁就产生了。     (2)死锁的第二种情况 用户A查询一条纪录,然后修改该条纪录;这时用户B修改该条纪录,这时用户A的事务里锁的性质由查询的共享锁企图上升到独占锁,而用户B里的独占锁由于A 有共享锁存在所以必须等A释放掉共享锁

事务

时间秒杀一切 提交于 2019-12-03 13:17:41
事务   事务必须服从ISO/IEC所指定的ACID原则。ACID是原子性,一致性,隔离性,持久性的缩写。   原子性:     表示事务执行过程中的任何失败都将导致事务所做的任何修改失效;   一致性:     表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行之前的状态;   隔离性:     表示事务执行过程中对数据的修改,在事务提交之前对其他事务不可见;   持久性:     表示已提交的数据在事务执行失败时,数据的状态都应该正确;   通俗的理解,事务是一组院子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行有错误,则撤销先前执行过的所有指令。更简单的说就是: 要么全部执行成功,要么撤销不执行 。 隔离级别   1. ISOLATION_READ_UNCOMMITTED :这是事务最低的隔离级别,它充许令外一个事务可以看到这个事务未提交的数据。(读未提交)   这种隔离级别会产生脏读,不可重复读和幻像读。   2. ISOLATION_READ_COMMITTED :保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据(读已提交)   3. ISOLATION_REPEATABLE_READ :这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻像读

spring_事物

浪尽此生 提交于 2019-12-03 13:17:39
spring_事物 1.事务   1.1 什么是事务:    事务(TRANSACTION) 是作为单个逻辑工作单元执行的一系列操作。 多个操作作为一个整体向系统提交,要么都执行,要么都不执行。 事务是一个不可分割的逻辑单元。    1.2 事务的特性:      事务具备以下四个特性,简称 ACID 属性。 原子性(Atomicity):   事务是一个完整的操作,事务的各步操作都是不可再分的,要么都执行,要么都不执行。 一致性(Consistency):   当事务完成时,数据必须处于一致的状态。 隔离性(Isolation):   并发事务之间相互独立、隔离,它不应以任何方式依赖于或影响其他事务。 持久性(Durability):   事务完成后,它对数据库的修改被永久保持。    1.3 mysql 事务操作---简单 ABCD 一个事务 Connection conn = null; try{ //1 获得连接 conn = ...; //2 开启事务 conn.setAutoCommit(false); A B C D //3 提交事务 conn.commit(); } catche(){ //4 回滚事务 conn.rollback(); }    1.4 mysql 事务操作---Savepoint 需求:AB(必须),CD(可选) Connection conn