web15_transaction

概述

  • 事务:指逻辑上的一组操作,组成这组操作的各个单元要么全都成功,要么全都失败。
  • 事务作用:就是保证在一个事务中的多个操作全都成功,或者全都失败。

mysql 的事务

事务操作

sql描述
start transaction开启事务
commit提交事务
rollback回滚事务

环境准备

代码演示

mysql 中有两种方式来管理事务

  • 自动提交
    mysql 默认使用自动提交的方式来管理事务,即执行一条sql语句提交一次事务
    扩展:Oracle 默认不自动提交事务
  • 手动提交
    将mysql的全局变量autocommit设置为0
    -- 查询autocommit
    SHOW VARIABLES LIKE '%autocommit%';
    
    -- 关闭自动提交. 0:OFF 1:ON
    SET AUTOCOMMIT = 0;
    
    -- 演示
    START TRANSACTION ;
    UPDATE accout set money = 999 where name = 'aa';
    COMMIT ;
    -- ROLLBACK ;
    

JDBC的事务

事务对象

Connection 对象的API描述
conn.setAutoCommit(false)开启事务
conn.commit()开启事务
conn.rollback()回滚事务

事务处理

  • 通过c3p0连接池获取连接
  • 通过dbutils来处理sql

ThreadLocal

ThreadLocal可以实现在一个线程中的数据共享。

事务特性

  • 原子性(Atomicity):是指事务是一个不可分割的工作单位,事务中的操作要么全部完成,要么全部失败。
  • 一致性(Consistency):是指事务前后数据的完整性必须保持一致。
  • 隔离性(Isolation):是指多个用户并发访问数据库的时候,多个并发事务之间的数据相互隔离。
  • 持久性(Durability):是指一个事务如果被提交,那它对数据库中数据的改变是持久性的。

并发访问的问题

如果不考虑隔离性,事务存在3个并发访问的问题

  • 脏读:一个事务读取到另一个事务未提交的数据。
  • 不可重复读:一个事务读取到另一个事务另一个事务已经提交(update)的数据,造成在一个事务中多次查询结果不一致。
  • 虚读/幻读:一个事务读取到另一个事务另一个事务已经提交(insert)的数据,造成在一个事务中多次查询结果不一致。

隔离级别

数据库设置了4种隔离级别,用来描述两个事务并发的所有情况

  • read uncommitted
    存在三个问题:脏读、不可重复读、虚读
    解决零个

  • read committed
    存在两个问题:不可重复读、虚读
    解决一个:脏读

  • repeatable read
    存在一个问题:虚读
    解决两个问题:脏读、不可重复读

  • serializable
    存在零个问题
    解决三个问题:脏读、不可重复读、虚读

  • Oralce 默认隔离级别:read committed; Mysql 默认隔离级别:repeatable read

  • 安全:read uncommitted < read committed < repeatable read < serializable

  • 性能:read uncommitted > read committed > repeatable read > serializable

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值