JavaWeb 之事务
什么是事务?
- 事务就是逻辑上的一组操作,组成事务的各个执行单元,操作要么全部成功,要么全部失败.
- 以转账为例: 张三给李四转账,张三扣1000,李四加1000; 加钱和扣钱两个操作组成了一个事务.
1. 事务的四大特性
- 原子性(Atomicity): 事务中所有操作是不可再分割的原子单位. 事务中所有操作要么全部执行成功,
要么全部执行失败. - 一致性(Consistency): 事务的其他特性都是为了这一特性服务的.即事务执行后,数据库状态和其他业
务规则保持一致, 如转账业务,无论事务执行成功与否,参与转账的两个帐号余额之和应该是不变的. - 隔离性(Isolation): 指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会相互干扰.
- 持久性(Durability): 一旦事务提交成功,事务中所有的数据操作都必须被持久化到数据库中,即使事务
提交后,数据库马上崩溃了,在数据库重启时,也必须能保证通过某种机制恢复数据.
2. MySql 中操作事务
在默认的情况下,MySql 每执行一条 SQL 语句,都是一个单独的事务.如果需要在一个事务中包含多条 SQL 语句,
那么需要开启事务和结束事务:
- 开启事务:
start transaction
; - 结束事务:
commit 或 rollback
;
// 示例: 张三给李四转账 100
START TRANSACTION; // 开启事务
UPDATE account SET balance=balance-100 WHERE id=1;
UPDATE account SET balance=balance+100 WHERE id=2;
ROLLBACK; // 回滚, 表示转账失败
START TRANSACTION; // 开启事务
UPDATE account SET balance=balance-100 WHERE id=1;
UPDATE account SET balance=balance+100 WHERE id=2;
COMMIT; // 提交, 表示转账成功
3. JDBC 中操作事务
- 在 JDBC 中操作事务,都是通过 Connection 完成的! 同一个事务中所有的操作,必须使用同一个 Connection 对象.
- Connection 对象与操作事务相关的方法:
setAutoCommit(false)
: 表示开启事务;commit()
: 表示提交事务;rollback()
: 表示回滚事务.
// 代码格式:
try{
con.setAutoCommit(false); // 开启事务
....
..
con.commit(); // 提交事务
}catch(){
con.rollback(); // 回滚事务
}
//
4. 事务隔离级别
1. 事务的并发读问题
- 脏读(dirty read): 读到了另一事务的未提交更新数据, 即读到了脏数据;
- 不可重复读(unrepeatable read): 对同一记录的两次读取不一致, 因为另一事务对该记录做了修改;
- 幻读(虚读,phantom read): 对同一张表的两次查询不一致, 因为另一事务插入了一条记录.
2. 不可重复读和幻读的区别
- 不可重复读是读取到了另一事务的更新;
- 幻读是读取到了另一事务的插入.
3. 四大隔离级别
3.1 SERIALIZABLE (串行化)
- 三种读问题都能处理;
- 不会出现任何并发问题, 因为它对同一数据的访问是串行的, 非并发访问;
- 性能最差;
3.2 REPEATABLE READ(可重复读)
- 防止脏读和不可重复读,不能处理幻读;
- 性能比 SERIALIZABLE 好;
- MySQL 数据库默认;
3.3 READ COMMITED (读已提交数据)
- 防止脏读, 没有处理不可重复读, 也没有处理幻读;
- 性能比 REPEATABLE READ 好;
- Oracle 数据库默认.
3.4 READ UNCOMMITED(读未提交数据)
- 可能出现任何事务并发问题;
- 性能最好;
5. MySQL 隔离级别
- MySQL 的默认隔离级别为
REPEATABLE READ
; - 查询隔离级别语句:
select @@tx_isolation
;
6. JDBC 设置隔离级别
con.setTransactionIsolation(int level);
参考资料:
JavaWeb 之事务的更多相关文章
- Hibernate框架第二天
### Hibernate的持久化类 ### ---------- **什么是持久化类** 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为 ...
- 框架之 hibernate之二
1. Hibernate持久化对象的状态 2. Hibernate的一级缓存 3. Hibernate操作持久化对象的方法 4. Hibernate的基本查询 Hibernate的持久化类 什么是持久 ...
- Hibernate的持久化对象
Hibernate的持久化类 什么是持久化类 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为是持久化类. * ...
- javaweb学习总结(三十八)——事务
一.事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐,对应于如下两条sql语句 update from account set mone ...
- 传智播客JavaWeb day11--事务的概念、事务的ACID、数据库锁机制、
1. 什么叫做事务? 2.默认情况下每一条sql语句都是一个事务,然后自动提交事务 ps:如果想多条语句占一个事务,则可以手动设置SetAutoCommit为false 3.关键字 start tr ...
- JavaWeb学习总结(十二)--事务
一.事务的介绍 1.1 什么是事务 银行转账!张三转10000块到李四的账户,这其实需要两条SQL语句: 给张三的账户减去10000元: 给李四的账户加上10000元. 如果在第一条SQL语句执行成功 ...
- 【JAVAWEB学习笔记】19_事务
事务 学习目标 案例-完成转账 一.事务概述 1.什么是事务 一件事情有n个组成单元 要不这n个组成单元同时成功 要不n个单元就同时失败 就是将n个组成单元放到一个事务中 2.mysql的事务 默认的 ...
- javaWeb事务
JDBC事务: cmd 命令上的事务开启: start transaction; / begin; 回滚 rollback; 提交 commit; JDBC事务控制: 开启事务:co ...
- JavaWeb学习笔记七 事务
什么是事务?一件事情有n个组成单元 ,要么这n个组成单元同时成功,要么n个单元就同时失败.就是将n个组成单元放到一个事务中. mysql的事务 默认的事务:一条sql语句就是一个事务,默认就开启事务并 ...
随机推荐
- C-printf/sprintf/snprintf中的类型转换详解
源码1 #include <stdio.h> void f1() { double x = -5.5625; printf("%d\n",x); //输出为0,为什么? ...
- oracle获取时间毫秒数
select (sysdate-to_date('1970-01-01','yyyy-mm-dd')-8/24)*24*60*60*1000-1* 60 * 60 * 1000 millisecon ...
- 当你输入一个网址/点击一个链接,发生了什么?(以www.baidu.com为例)
>>>点击网址后,应用层的DNS协议会将网址解析为IP地址: DNS查找过程: 浏览器会检查缓存中有没有这个域名对应的解析过的IP地址,如果缓存中有,这个解析过程就将结束. 如果用户 ...
- sshd服务安装和配置管理
1.SSHD简介(介绍) SSH协议:安全外壳协议,为Secure Shell的缩写,SSH为建立在应用层和传输层基础上的安全协议. sshd服务使用SSH协议可以用来进行远程控制,或在计算机之间传送 ...
- 论C++STL源代码中关于堆算法的那些事
关于堆,我们肯定熟知的就是它排序的时间复杂度在几个排序算法里面算是比較靠上的O(nlogn)常常会拿来和高速排序和归并排序讨论,并且它还有个长处是它的空间复杂度为O(1), 可是STL中没有给我们提供 ...
- Atitit.java jna 调用c++ dll 的总结
Atitit.java jna 调用c++ dll 的总结 1. JNA技术解密1 1.1. JNA工作原理1 2. JNA技术难点 Java—C和操作系统数据类型的对应表1 2.1. 1 2.2. ...
- Nginx编译安装第三方模块http_substitutions_filter_module
Nginx编译安装第三方模块http_substitutions_filter_module 分类:服务器技术 作者:rming 时间:-- . >>ngx_http_substitu ...
- phpexcel图形图表(二)图形
原创文章,转载请注明出处:http://www.cnblogs.com/phpgcs 本篇文章实例演示如上图,画3种图形以及多sheet操作等 先回忆下第一篇中line图形的API调用步骤: 1,引入 ...
- Consul实现原理系列文章3: Consul的整体架构
工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理.在前几篇文章介绍完了Consul用到的两个关键性东西Raft和Gossip之后,这篇文章会讲述Con ...
- 集合Set映射一对多(使用xml文件)
如果持久化类设置了包含实体引用的对象,则需要使用一对多关联来映射集合(Set)元素. 我们可以通过任意一个Set集合来映射这个列表对象. 下面来看看看设置对象的持久化类. 在这种情况下,一个问题可以有 ...