事务

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. Android Studio中 安卓模拟器 联网

    方案一:之前做测试的时候发现虚拟机无法联网(浏览器打开 www.baidu.com, 显示 403 forbidden): 解决方案:关闭已经打开的虚拟机,进入到 SDK 安装目录下,按住 shift ...

  2. Lesson 14 The Butterfly Effect

    Why do small errors make it impossible to predict the weather system with a high degree of accuracy? ...

  3. UIAutomation 测试winForm

    static void Main(string[] args) { Console.WriteLine("\n开始窗口程序自动化测试\n"); //启动被测试程序 string p ...

  4. 帆软FineReport报表使用小技巧

    1.IF函数写法: =IF(E3=0 && F3=0 && G3=0,1,0)

  5. 【PAT甲级】1027 Colors in Mars (20 分)

    题意: 输入三个范围为0~168的整数,将它们从十三进制转化为十进制然后前缀#输出. AAAAAccepted code: #define HAVE_STRUCT_TIMESPEC #include& ...

  6. FFmpeg RTSP流通过UDP传输问题

    我自己在使用SRS服务的Ingest功能时发现在读取一个网络摄像头的RTSP流时一直不成功, 具体分析后发现SRS在调用FFmpeg时出了问题: /usr/local/ffmpeg/bin/ffmpe ...

  7. [swscaler @ ...] deprecated pixel format used, make sure you did set range correctly

    我自己在使用如下函数进行转换时报的错 int sws_scale(struct SwsContext *c, const uint8_t *const srcSlice[], const int sr ...

  8. ubunut18.04 下安装 gitlab ce版,使用清华源

    gitlab官方的ubuntu安装说明 https://about.gitlab.com/install/#ubuntu 该安装说明介绍的是gitlab-ee版本 按照该说明也能安装gitlab-ce ...

  9. Android Studio中 no module 问题,解决方法

    等它执行完以后就好了 或者根据提示手动下载缺失的.

  10. Python 基础之函数的嵌套与nonlocal修改局部变量及闭包函数

    一.函数的嵌套 嵌套在外层,称之为外函数 嵌套在里层,称之为内函数#例:def outer(): def inner():        print("I'm inner")    ...