十二 事务&安全问题&隔离级别
事务
transaction,指一组操作,里面包含许多单一逻辑,只要一个逻辑没有执行成功,那么都算失败。所有的数据都回到最初的状态(回滚)。
为什么要有事务?
确保逻辑的成功,例子:银行转账
事务针对连接。
事务的开始和结束:start transaction --> commit/rollback;

测试事务:
代码里面的事务,主要是针对连接
- 关闭自动提交:conn,setAutoCommit(false);
- 提交:conn.commit , 一旦提交,数据库里面的数据会发生变化
- 回滚:conn.rollback 让上次执行的操作无效
public class TestDemo {
@Test
public void transaction() {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JDBCUtil.getConn();
//连接,关闭事务默认自动提交
conn.setAutoCommit(false);
String sql = "update account set money = money - ? where id = ?";
ps = conn.prepareStatement(sql);
//给id为1的减100
ps.setInt(1, 100);
ps.setInt(2, 1);
ps.executeUpdate();
// int a = 10/0;
//给id为2 的加100
ps.setInt(1, -100);
ps.setInt(2, 2);
ps.executeUpdate();
//成功则提交事务
conn.commit();
/* while(rs.next()){
System.out.println(rs.getString("name")+":"+rs.getDouble("money"));
}*/
} catch (SQLException e) {
//失败则回滚
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}finally {
JDBCUtil.release(conn, ps, rs);
}
}
}
事务的特点ACID(面):
原子性:指的是事务中包含的逻辑不可分割
一致性:指的是事务执行前后,数据的完整性一致
隔离性:事务在执行期间不应该受到其他事务的影响
持久性:事务执行结束,事务应该永久保存到磁盘上。
安全问题&隔离级别(面):
事务的安全隐患 :
读:
- 脏读:一个事务读到另外一个事务还未提交的数据
- 不可重复读:一个事务读到了另外一个事务提交的数据,造成前后两次查询结果不一致
- 幻读:一个事务读到了另一个事务已提交的插入的数据,导致前后查询结果不一致
写:丢失更新(新提交的事务覆盖上一次提交的事务做出的修改)

隔离级别:
- (Read Uncommitted)读未提交:引发“脏读”,一个事务可以读到另一个事务还未提交的数据,读取到的是数据库内存中的数据,而非真的磁盘上的数据。
- (Read Committed)读已提交:解决脏读,引发“不可重复读”。只能读取到其他事务已经提交的数据,那些没有提交的数据读不到,造成:前后读取结果不一样。多 次读取结果不同,不可重
- (Repeatable Read)可重复读:解决脏读、不可重复读,未解决:幻读。让事务在会话中重复读取数据,并且不会出现结果不一样的情况,即使其他事务已经提交,还是显示以前的数据。
- 可串行化(Serializable):能解决脏读、不可重复读、幻读。谁先打开事务,谁就有先执行的权利,后打开的事务只能等先打开的事务提交或者回滚后才能执行。效率低,容易造成性能问题,用得少。
- 效率排序:
- 默认的隔离级别:读未提交>读已提交>重读读>可串行化
- MySQL:Repeatable 重复读
- Oracal :Read Committed 读已提交
十二 事务&安全问题&隔离级别的更多相关文章
- MySQL 温故知心(二) 事务的隔离级别
事务的隔离级别 A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据但是 在A事务中查询的话 查到的都是操作之后的数据没有提交的数据只有自己看得到,并没有update到数据库 查看 ...
- 事务之二:spring事务(事务管理方式,事务5隔离级别,7个事务传播行为,spring事务回滚条件)
事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性. spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或 ...
- MySQL事务及隔离级别详解
MySQL事务及隔离级别详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的基本架构 MySQL的基本架构可以分为三块,即连接池,核心功能层,存储引擎层. 1> ...
- JDBC学习笔记(7)——事务的隔离级别&批量处理
数据库事务的隔离级别 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 ...
- 【转】JDBC学习笔记(7)——事务的隔离级别&批量处理
转自:http://www.cnblogs.com/ysw-go/ 数据库事务的隔离级别 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发 ...
- 几种事务的隔离级别,InnoDB如何实现?
事务ACID特性,其中I代表隔离性(Isolation). 什么是事务的隔离性? 隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离 ...
- SQL Server 之 事务与隔离级别实例讲解
SQL Server 之 事务与隔离级别实例讲解 SQL Server 实现了6个隔离级别来防止并发情况下,类似企图并发的访问或修改同一数据时问题的发生.本文将带你体验全部6个隔离级别.正如你接下来将 ...
- 4种事务的隔离级别,InnoDB怎样巧妙实现?
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/z50L2O08e2u4afToR9A/article/details/82186189 事务ACID ...
- MySQL数据库事务各隔离级别加锁情况--read committed && MVCC(转载)
http://www.imooc.com/article/17290 http://www.51testing.com/html/38/n-3720638.html https://dev.mysql ...
随机推荐
- 02-13Android学习进度报告十三
今天我学习了ListView之checkbox错位问题解决.感觉还是很麻烦的. 好的存储这个Checkbox的方法有很多,你可以放到一个HashMap<Integer, Boolean>中 ...
- Update(Stage4):spark_rdd算子:第2节 RDD_action算子_分区_缓存:算子和分区
一.reduce和reduceByKey: 二.:RDD 的算子总结 RDD 的算子大部分都会生成一些专用的 RDD map, flatMap, filter 等算子会生成 MapPartitions ...
- December 21st, Week 51st Saturday, 2019
May the odds be ever in your favor. 愿好运永远眷顾你. From The Hunger Games. May we all have good luck, and ...
- 爬虫模拟cookie自动登录(人人网自动登录)
什么是cookie? 在网站中,HTTP请求时无状态的,也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是谁,cookie的出现就是为了解决这个问题,第一次登陆后服 ...
- HDU1176免费馅饼(DP)
都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼.说来gameboy的人品实在是太好了,这馅饼别处都不掉,就掉落在他身旁的10米范围内.馅饼如果掉在了地上当然就 ...
- redis 高级学习和应用场景
redis 高级学习 1.redis 复制 2.redis 集群 3.哨兵机制 4.spring 与哨兵结合 5.数据恢复与转移 6.redis 的阻塞分析 redis 实战 1. 数据缓存(热点数据 ...
- [HNOI 2017]大佬
Description 题库链接 题意简述来自Gypsophila. 你现在要怼 \(m\) 个大佬,第 \(i\) 个大佬的自信值是 \(C_i\) .每次怼大佬之前,你的自信值是 \(mc\),等 ...
- underscore.js -2009年发布的js库
2009 Underscore.js 0.1.0发布 Underscore一个JavaScript实用库,提供了一整套函数式编程的实用功能,但是没有扩展任何JavaScript内置对象.它是这个问题的 ...
- 转:Entity Framework 5.0 Code First全面学习
Code First 约定 借助 CodeFirst,可通过使用 C# 或Visual Basic .NET 类来描述模型.模型的基本形状可通过约定来检测.约定是规则集,用于在使用 Code Firs ...
- 笔记||Python3进阶之装饰器
# 装饰器# 特征: 是用一个@开头的字符串# 装饰器通常用来装饰函数.或者类的方法# 被装饰后的函数,通常是在原有的函数基础上,会多出增加一点功能# 一般来说装饰器本身也是一个函数## def te ...