h2事务与mysql_springboot09 事务 H2数据库

本文介绍了事务的概念,包括原子性、一致性、隔离性和持久性,并通过代码示例展示了在MySQL和H2数据库中如何进行事务操作。重点讨论了事务的隔离级别及其在并发操作中解决的问题,如脏读、不可重复读和幻读。此外,还探讨了在三层结构(控制器、业务逻辑和服务层)中如何管理事务,特别提到了使用ThreadLocal在Service层和DAO层之间共享Connection以实现事务控制。最后,简述了H2数据库的特性、下载安装过程以及不同运行模式。
摘要由CSDN通过智能技术生成

一、事务

1. 事务介绍

事务可以包含多个操作步骤 , 如果有一个步骤失败,那么这一组都以失败告终。

事务是指包含多个微小逻辑单元的一组操作, 只要其中有一个逻辑失败了,那么这一组操作就全部以失败告终,不存在一半成功,一半不成功的状况。

事务在平常的CRUD当中也许不太常用, 但是如果我们有一种需求,要求,一组操作中,必须全部成功执行,才算完成任务,只要有一个出错了,那么所有的任务都将回到最初的状况,恢复原样。那么这就可以使用事务了。如: 银行的转账例子 , 又如一次性往两张表添加记录,需要确保这两张表都能全部成功添加,不允许一张表成功,一张表失败这种情况出现。

2. 事务入门

1. 命令行演示

方式一

img02.png

-- 开启事务

start transaction;

-- 执行操作

update student set age = 28 where id = 6;

-- 提交事务,只有提交事务,数据才会真的保存到底层设备上。

commit;

-- 如果不想提交,想回到最初的状态,那么可以回滚事务.

rollback;

方式二

mysql 的事务设置是自动提交,我们可以关闭掉自动提交开关,然后手动提交事务。

img01.png

-- 显示有关提交的变量信息

show variables like '%commit%';

-- 关闭自动提交

set autocommit = off ; 或者写成 set autocommit = 0 ;

-- 执行操作,可以不用开启事务

update student set age = 28 where id = 6;

-- 必须提交,才能看到结果

commit;

2. 代码演示

@Test

public void testTransaction(){

Connection conn = null;

try {

ComboPooledDataSource dataSource = new ComboPooledDataSource();

conn = dataSource.getConnection();

//开启事务 关闭自动提交,

conn.setAutoCommit(false);

//3. 执行语句

String sql = "insert into student values(null ,?,?)";

PreparedStatement ps = conn.prepareStatement(sql);

ps.setString(1,"lisi2");

ps.setInt(2,19);

ps.executeUpdate();

//提交事务

conn.commit();

//释放资源..回收连接对象

ps.close();

conn.close();

} catch (Exception e) {

e.printStackTrace();

//如果出现了异常,那么回滚事务

try {

conn.rollback();

} catch (SQLException e1) {

e1.printStackTrace();

}

}

}

3. 事务特性 ACID

原子性

原子性(Atomicity) : 事务中的逻辑要全部执行,不可分割。(原子是物理中最小单位)

一致性

一致性(Consistency):事务执行的结果必须是使数据库数据从一个一致性状态变到另外一种一致性状态

隔离性(isolation)

一个事务的执行过程中不能影响到其他事务的执行,即一个事务内部的操作及使用的数据对其他事务是隔离的,并发执行各个事务之间无不干扰。

持久性()

即一个事务一旦提交,它对数据库数据的改变是永久性的。之后的其它操作不应该对其执行结果有任何影响。

4. 事务隔离级别

主要是用来解决事务并发执行,引发的问题。

如果两个事务同时,或者交错执行,那么他们的执行结果可能会受对方影响,这会导致数据的前后显示不一致。所以为了保证并

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值