十二 事务&安全问题&隔离级别
事务
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 ...
随机推荐
- MySQL表结构导出Excel
1. information_schema.COLUMNS表记录了所有库中所有表的字段信息 SELECT COLUMN_NAME 字段名称, COLUMN_TYPE 字段类型, COLUMN_DEFA ...
- 什么是SOA架构
什么是SOA架构 SOA是Service-Oriented Architecture的首字母简称,它是一种支持面向服务的架构样式.从服务.基于服务开发和服务的结果来看,面向服务是一种思考方式.其实SO ...
- 「JSOI2011」任务调度
「JSOI2011」任务调度 传送门 一开始还在想写平衡树,看到 \(\text{TRANS}\) 操作后就晓得要用可并堆了. 这题好像就是个可并堆的板子题??? ADD 直接往对应的对里面加元素 D ...
- win8.1 virtualbox 安装centos7注意事项
win8.1是64位的,一开始在virtualbox中选择版本时,怎么也选不到64位的,这时要改BIOS设置,把CPU虚拟化改为允许. virtualbox是32位的,没必要非得是64位(64位的也不 ...
- Python 爬取 热词并进行分类数据分析-[云图制作+数据导入]
日期:2020.01.28 博客期:136 星期二 [本博客的代码如若要使用,请在下方评论区留言,之后再用(就是跟我说一声)] 所有相关跳转: a.[简单准备] b.[云图制作+数据导入](本期博客) ...
- Cookie信息保存到本地(MozillaCookieJar)
from urllib import request from http.cookiejar import MozillaCookieJar cookiejar = MozillaCookieJar( ...
- Kali Linux RPi0w Nexmon操作笔记
Kali Linux RPi0w Nexmon镜像下载地址:https://www.offensive-security.com/kali-linux-arm-images/ 1.烧录系统 可参考:树 ...
- .NET精彩博文
vs2019安装和使用教程(详细) 为什么选择.NETCore? C#中Socket的简单使用
- 将一行很长的js代码格式化输出方便查看
之前的一行js代码,有2万多字符,打开这个网址,粘贴到左边空白框,点下面格式化: 参考下面文章: 数千行的js代码变成了一行,如何复原,该换行的换行,该对齐的对齐_开发工具_小邯韩的博客-CSDN博客 ...
- Spark教程——(10)Spark SQL读取Phoenix数据本地执行计算
添加配置文件 phoenixConnectMode.scala : package statistics.benefits import org.apache.hadoop.conf.Configur ...