十二 事务&安全问题&隔离级别
事务
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 ...
随机推荐
- nm
nm是names的缩写,功能是列出目标文件的符号清单,常用来查看动态链接库中的函数. nm选项 -a 按照man手册,仅列出调试信息,实际上却是调试信息+正常信息 -A 增加一列显示目标文件, ...
- 杭电 2097 sky数
Sky数 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- Mysql安装 ----> 基于源码包安装
1)基于源码包安装MySQL [root@localhost ~]# rpm -q mysql mysql-server mariadb mairadb-server //检查有没 ...
- 误删/boot下文件或目录的修复方式!
步骤:进入硬盘的急救模式,进入磁盘,挂载光盘到/media上,rpm安装内核到media目录下,从装grub程序到/dev/sda,然后将grub文件从定向到/boot下,然后重启. 第一步:进入bi ...
- 第四节:Vuejs组件及组件之间的交互
一. 组件及其交互 1.组件的注册 (1).全局注册 Vue.component('组件名称', { }) 第1个参数是标签名称,第2个参数是一个选项对象. 选项参数包括 data:必须是一个func ...
- cmake学习资料收集
CMake 学习笔记 : https://www.jianshu.com/p/c417e4ab8b30
- Win32 开发记录
Typedefs LPCSTR = char* LPCWSTR = wchar_t* Webpages Control reference: https://docs.microsoft.com/en ...
- spring boot中的底层配置文件application.yam(application.property)的装配原理初探
*在spring boot中有一个基础的配置文件application.yam(application.property)用于对spring boot的默认设置做一些改动. *在spring boot ...
- Systemverilog for design 笔记(七)
转载请标明出处 第一章 接口(interface) 1.1. 接口的概念 接口允许许多信号合成一组由一个端口表示. 1.2. 接口声明 //接口定义 Interface main_bus ...
- SRS源码——UDP
srs_app_server.cpp int SrsServer::listen() { int ret = ERROR_SUCCESS; if ((ret = listen_rtmp()) != ...