【自用学习笔记】事务-spring总结

学习内容来自b站江南一点雨

事务

ACID:

原子性(要么全完成,要么全回滚)

一致性(事务执行前后数据库完整性不会被破坏)

隔离性(允许多个并发事务同时对数据修改、读写)

持久性(数据处理结束后对数据库的修改是永久的)

MySQL事务–隔离级别

分为四种,即

​ 序列化/串行化Serializable:只有一个事务可以执行,多个用户顺序执行事务;最安全,效率低

​ 可重复读Repeatable read(mysql默认):当前事务处理期间,变化不能被其他用户看到;自己查的时候,提交事务之前,不管别人怎么改数据、怎么提交,我自己看到的数据都是不变的 --幻读

​ 提交读Read committed:可以读到别人提交后的数据 --幻读(别人要插入的数据跟我要加的数据冲突了,别人还没提交,我这一直卡着)、不可重复读

​ 未提交读Read uncommitted:能读到别人没提交的数据 --幻读(查数据的时候有某条数据,但是删不掉,因为别人还没提交)、不可重复读、脏读(读到别人修改、没提交的数据,别人回滚了我查的数据不对了)

解决了以下问题:

​ 脏读(读了别人修改、没提交的数据)

​ 不可重复读(在一个事务内,读表中某一行数据,多次读结果不同;读了别人 提交 前后的数据)

​ 幻读(一个事务内,多次读,结果集个数不一样)

√: 可能出现 ×: 不会出现

脏读 不可重复读 幻读
Read uncommitted
Read committed ×
Repeatable read × ×
Serializable × × ×

随着隔离级别增加,性能降低

查询事务隔离级别

方法一:命令行连接数据库,用“show variables like ‘tx_isolation’;”

-- 8之前
show variables like 'tx_isolation';
-- 8之后
show variables like 'transaction_isolation';

方法二:“SELECT @@tx_isolation;”

SELECT @@tx_isolation;
SELECT @@transaction_isolation;

全局查询在@@后加global.

修改事务隔离级别

set session transaction isolation level 要设置的隔离级别;

使用事务

开启事务–执行SQL–事务提交

start transaction;
-- SQL语句;
commit;

Spring中的事务

三大基础组件

1.PlatformTransactionManager 事务处理的核心

​ getTransaction(); 根据传入的事务设置对象(TransactionDefinition)创建事务对象

​ commit();事务提交

​ rollback();事务回滚

2.TransactionDefinition 事务定义(定义事务的属性、规则)

在这里插入图片描述

​ 五条主要规则:隔离性、传播性、回滚规则、超时时间、事务是否只读

3.TransactionStatus 事务状态 (事务的本身)

​ 查看当前事务是否是新事务、是否有savepoint

​ flush(); 刷新

编程式事务

不常用,使用步骤:

1.创建项目,导入依赖,配置包扫描

2.配置数据源,提供事务管理器transactionManager,配置JDBCTemplate 或配置TransactionTemplate,JDBCTemplate

<!--配置数据源-->
<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource" id="dataSource">
    <property name="password" value="root"/>
    <property name="username" value="root"/>
    <property name="url" value="jdbc:mysql://test?serverTimezone=Asia/shanghai"/>
    <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
</bean>

<!--提供事务管理器-->
<bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>

<!--配置TransactionTemplate-->
<bean class="org.springframework.transaction.support.TransactionTemplate" id="transactionTemplate">
    <property name="transactionManager" ref="transactionManager
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值