MyBatis如何理解事物控制呢?

22 篇文章 0 订阅
2 篇文章 0 订阅

MyBatis如何理解事物控制呢?

原创: 阿琰 校对:李二
什么是事务

一、概念

事务指的是逻辑上的一组操作,这一组操作要不同时成功,要不同时失败,只要这一组操作里有一个失败,意味着这一组都失败 —同生共死

二、事务的管理

(MySQL数据库事务默认是自动提交,Oracle数据库事务默认是不自动提交)

(一)dos命令行管理事务
1.手动开启事务
start tansaction --开启事务
excute 多条 sql
commit 提交 / rollback 回滚
2.设置一个自动提交参数
show variables like ‘%commit%’ --查看与commit相关参数
set autocommit = 0; – 将autocommit参数设置为OFF.

自动提交参数
(二)JDBC管理事务
JDBC的事务的管理的API
setAutoCommit(boolean autoCommit); --是自动提交还是手动
commit(); --提交事务
rollback(); --回滚

(三)创建表,插入3条数据
create table account(
id int primary key auto_increment,
name varchar(20),
money double
);

insert into account values (null,‘张森’,10000);
insert into account values (null,‘凤姐’,10000);
insert into account values (null,‘如花’,10000)

内省
1.用来获取JavaBean的属性及属性的get和set方法
2.JavaBean就是一个满足了特定格式的Java类
JavaBean

三、事务特性

原子性:强调事务的不可分割
一致性:强调的是事务的执行的前后,数据的完整性要保持一致
隔离性:一个事务的执行不应该受到其他事务的干扰
持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库

四、如果不考虑隔离性,会引发一些安全性问题

1、读问题
脏读:一个事务读到另一个事务还没有提交的数据
不可重复读:一个事务读到了另一个事务已经提交的update数据,导致在当前的事务中多次查询数据不一致
虚读/幻读:一个事务读到另一个事务已经insert数据,导致当前事务中多次查询结果不一致

2、写问题
引发两类丢失更新

五、解决引发的读问题

设置事务的隔离级别
read uncommitted :未提交读。脏读,不可重复读,虚读都可能发生
read committed :已提交读。避免脏读,不可重复读和虚度有可能发生
repeatable read :可重复读。避免脏读和不可重复读,虚读可能发生
serializable :串行化的。避免脏读,不可重复读,虚读的发生
select @@tx_isolation; 查看隔离级别
set session transaction isolation level 级别; 设置隔离级别

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值