事务

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 读已提交

十二 事务&安全问题&隔离级别的更多相关文章

  1. MySQL 温故知心(二) 事务的隔离级别

    事务的隔离级别 A事务做了操作 没有提交 对B事务来说 就等于没做 获取的都是之前的数据但是 在A事务中查询的话 查到的都是操作之后的数据没有提交的数据只有自己看得到,并没有update到数据库 查看 ...

  2. 事务之二:spring事务(事务管理方式,事务5隔离级别,7个事务传播行为,spring事务回滚条件)

    事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性. spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务管理使用TransactionTemplate或 ...

  3. MySQL事务及隔离级别详解

    MySQL事务及隔离级别详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的基本架构 MySQL的基本架构可以分为三块,即连接池,核心功能层,存储引擎层. 1> ...

  4. JDBC学习笔记(7)——事务的隔离级别&批量处理

    数据库事务的隔离级别 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 ...

  5. 【转】JDBC学习笔记(7)——事务的隔离级别&批量处理

    转自:http://www.cnblogs.com/ysw-go/ 数据库事务的隔离级别 对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发 ...

  6. 几种事务的隔离级别,InnoDB如何实现?

    事务ACID特性,其中I代表隔离性(Isolation). 什么是事务的隔离性? 隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离 ...

  7. SQL Server 之 事务与隔离级别实例讲解

    SQL Server 之 事务与隔离级别实例讲解 SQL Server 实现了6个隔离级别来防止并发情况下,类似企图并发的访问或修改同一数据时问题的发生.本文将带你体验全部6个隔离级别.正如你接下来将 ...

  8. 4种事务的隔离级别,InnoDB怎样巧妙实现?

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/z50L2O08e2u4afToR9A/article/details/82186189 事务ACID ...

  9. MySQL数据库事务各隔离级别加锁情况--read committed && MVCC(转载)

    http://www.imooc.com/article/17290 http://www.51testing.com/html/38/n-3720638.html https://dev.mysql ...

随机推荐

  1. quartz定时任务cron表达式讲解及翻译成现实语言的插件的使用详解

    cron表达式讲解 参见该网址: https://www.cnblogs.com/GarfieldTom/p/3746290.html cron表达式只有专业技术人员才看得懂,普通人不知道表达式是什么 ...

  2. 文件的读取与保存(try-with-resource优雅关闭)

    借鉴:https://www.cnblogs.com/itZhy/p/7636615.html 一.背景 在Java编程过程中,如果打开了外部资源(文件.数据库连接.网络连接等),我们必须在这些外部资 ...

  3. Python3中reduce和lambda的用法

    reduce() 函数将一个数据集合(iterable[, initializer])可以看出是包含了初始化数据的,且初始化数据位列第1位,即集合中的第1个元素)中的所有数据进行下列操作:先对集合中的 ...

  4. pip-9.0.1更新到pip-10.0.1遇到的问题

    使用 pip 安装第三方库时,报错: You are using pip version 9.0.3, however version 10.0.1 is available. You should ...

  5. [经验] 如何将 Java 项目发布到云服务器上并可以访问

    环境: 云服务器 Linux centos7.6 1: 安装 Tomcat  (apache-tomcat-9.0.26.tar.gz) 下载压缩包 --> 通过SSH上传到云服务器 --> ...

  6. Spring Boot 2 实战:如何自定义 Servlet Filter

    1.前言 有些时候我们需要在 Spring Boot Servlet Web 应用中声明一些自定义的 Servlet Filter 来处理一些逻辑.比如简单的权限系统.请求头过滤.防止 XSS 攻击等 ...

  7. 乒乓球(0)<P2003_1>

    乒乓球(table.cpp/c/pas) [问题背景]国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的争议,有一部分球员因为无法适应 ...

  8. 为spring boot 写的Controller中的rest接口配置swagger

    1.pom.xml文件中加入下列依赖: <dependency> <groupId>io.springfox</groupId> <artifactId> ...

  9. Linux--如何实现虚拟机与主机之间的文件传输无需第三方,即可轻松设置共享文件夹(适合所有人群)

    无需第三方插件,设置共享文件夹 第一步:虚拟机->设置 第二步:选项->共享文件夹->总是启用->添加 第三步:点击下一步 第四步:浏览(选择主机路径)->下一步 第五步 ...

  10. redhat 7.6 VI编辑操作

    模式一: 浏览模式 0 : 光标到行首 $ : 光标到行尾 gg:光标到首行 G:光标到尾行 yy:复制光标所在行 dd:剪切光标所在行,删除行 y11y:复制光标所在行,往下数,一共10行 p:粘贴 ...