当前位置:网站首页>seata相关图形,dljd,cat
seata相关图形,dljd,cat
2022-08-11 11:44:00 【aiwokache】
一 spring事务
二 mybatis事务
三 hibernate事务
四 jdbc事务
五 jdbc的本质
六 mysql事务
1 事务的业务与需求
正是因为做某件事的时候,需要多条DML语句共同联合起来才能完成,所以需要事务的存在。如果任何一件复杂的事儿都能一条DML语句搞定,那么事务则没有存在的价值了。
2 思想思路
一个事务其实就是一个完整的业务逻辑。
3 流原:事务是怎么做到多条DML语句同时成功和同时失败的呢?
- 事务开启:Start Transaction
- InnoDB存储引擎:提供一组用来记录事务性活动的日志文件。
- 在事务的执行过程中,每一条DML的操作都会记录到“事务性活动的日志文件”中。
- 提交事务:commit
- 清空事务性活动的日志文件,将数据全部彻底持久化到数据库表中。
- 提交事务标志着,事务的结束。并且是一种全部成功的结束。
- 回滚事务?(roolbak:回滚永远都是只能回滚到上一次的提交点!)
- 清空事务性活动的日志文件,并且将之前所有的DML操作全部撤销
- 回滚事务标志着,事务的结束。并且是一种全部失败的结束。
4 mysql事务自动提交
- mysql默认情况下是支持自动提交事务的(自动提交)。
- 什么是自动提交?每执行一条DML语句,则提交一次!
- 这种自动提交实际上是不符合我们的开发习惯,因为一个业务通常是需要多条DML语句共同执行才能完成的,为了保证数据的安全,必须要求同时成功之后再提交,所以不能执行一条就提交一条。
- 自动提交与非自动提交的特点
- 启用自动提交模式:
- 如果自动提交模式被启用,则单条 DML 语句将缺省地开始一个新的事务。
- 如果该语句执行成功,事务将自动提交,并永久地保存该语句的执行结果。
- 如果语句执行失败,事务将自动回滚,并取消该语句的结果。
- 在自动提交模式下,仍可使用 START TRANSACTION 语句来显式地启动事务。这时,一个事务仍可包含 多条语句,直到这些语句被统一提交或回滚。
- 禁用自动提交模式:
- 如果禁用自动提交,事务可以跨越多条语句。
- 在这种情况下,事务可以用 COMMIT 和 ROLLBACK 语句来显式地提交或回滚。
- 查看mysql自动提交事务模式
mysql> SHOW VARIABLES LIKE 'autocommit'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | autocommit | ON | +---------------+-------+ 1 row in set, 1 warning (0.04 sec) 结果显示,autocommit 的值是 ON,表示系统开启自动提交模式。
- 开启或关闭mysql自动提交事务功能
- 在 MySQL 中,可以使用 SET autocommit 语句设置事务的自动提交模式,语法格式如下:
SET autocommit = 0|1|ON|OFF;
对取值的说明: - 值为 0 和值为 OFF:关闭事务自动提交。如果关闭自动提交,用户将会一直处于某个事务中,只有提交或回滚后才会结束当前事务,重新开始一个新事务。
- 值为 1 和值为 ON:开启事务自动提交。如果开启自动提交,则每执行一条 SQL 语句,事务都会提交一次。
- 在 MySQL 中,可以使用 SET autocommit 语句设置事务的自动提交模式,语法格式如下:
5 事务的4大特性
事务包括4个特性:ACID
- 原子性:不可再分。
- 一致性:在同一个事务当中,所有操作必须同时成功,或者同时失败,以保证前后数据的一致性。
- 隔离性:
教室A和教室B之间有一道墙,这道墙就是隔离性。
两个事务同时去操作一张表:A事务在操作一张表的时候,另一个事务B也操作这张表会那样???这就是隔离性。
相当于多线程并发访问同一张表一样,此时就会有多线程带来的线程安全问题。为了解决事务之间的线程安全问题,就要使用事务的隔离性。 - 持久性:将数据持久化到硬盘上的数据库中。
6 重点研究一下事务的隔离性!!!
事务的隔离级别:A教室和B教室中间有一道墙,这道墙可以很厚,也可以很薄。这道墙越厚,表示隔离级别就越高。
分类:
读未提交(最低级别):没有提交就读到了
原因:事务A可以读取到事务B未提交的数据。
问题:脏数据,脏读现象
读已提交:提交之后才能读到。数据绝对真实,oracle默认。
原因:事务A只能读取到事务B提交之后的数据。
解决:读未提交
问题:不可重复读
什么是不可重复读取数据呢?在事务开启之后,第一次读到的数据是3条,当前事务还没有结束,可能第二次再读取的时候,读到的数据是4条,3不等于4称为不可重复读取。
可重复读:即使提交之后也读不到,永远读取的都是事务A刚开启事务时的数据。数据不够真实,出现幻影读。mysql默认。
原因:事务A开启之后,不管是多久,每一次在事务A中读取到的数据都是一致的。即使事务B将数据已经修改,并且提交了,事务A读取到的数据还是没有发生改变,这就是可重复读。
解决:不可重复读
问题:可以会出现幻影读。每一次读取到的数据都是幻象。不够真实!
案例:以下需求应该使用什么样的隔离级别?可重复读即可。
下午1点开始开启了事务,只要事务不结束,到下午3点,读到的数据还是那样!
原理:就是做了数据的一个备份,或者说对数据进行了一个快照。
序列化/串行化(最高级别):
原因:事务排队,需要等待其他事务的提交,不能并发!有类似于java中的synchronized,线程同步(事务同步)。
解决:解决了以上所有问题(读未提交、读已提交、可重复读)
问题:每一次读取到的数据都是最真实的,并且效率是最低的。
7 事务的提交与回滚演示
- 创建表
- 查询表中数据
- 开启事务
- 插入数据
- 查看数据
- 修改数据
- 查看数据
- 回滚事务
- 查看数据
七 oracle事务
1oracle数据库的事务由下列语句组成:
- 一组DML语句,修改的数据在他们中保持一致
- 一个DDL (Data Define Language) 语句
- 一个DCL (Data Control Language)语句
2 事务的开始与结束
- 开始于:第一个执行的DML语句
- 结束于:
- commit 或 rollback
- DDL or DCL语句(隐式的提交事务)
- 用户连接异常,或用户断开连接(隐式的回滚)
- 系统崩溃(隐式的回滚)
3 事务的自动提交设置
因为 oracle 的这种机制,所以有的工具增加了进行自动提交的设置,就是对于需要显示提交的,工具检测出来后,自动的给加上 commit。看着的效果就是不需要执行 commit 就能生效,其实是后台在后面自动给你执行了 commit。
Oracle SQL Developer启用(关闭)自动提交事务,设置自动commit
若把AUTOCOMMIT设置为ON,则在插入、修改、删除语句执行后,系统将自动进行提交,这就是自动提交。其格式为:SQL>SET AUTOCOMMIT ON;
边栏推荐
- 锂电池充电芯片IC
- 概率期望及计数的一些性质应用
- 兴盛优选:时序数据如何高效处理?
- Web3 创业者指南:如何为你的产品构建一个去中心化社区?
- Common operations in Typora tables
- 【毕业设计】远程智能浇花灌溉系统 - stm32 单片机 嵌入式 物联网
- Through the thermal lens focus on different types of gaussian model
- 云原生(三十四) | Kubernetes篇之平台存储系统实战
- EXCLUSIVE INTERVIEW | INTELLIGENCE IS SPONTANED, NOT PLANNED: Evolution Fan, Former OpenAI Research Manager and UBC Associate Professor Jeff Clune
- 如何批量下载hugging face模型和数据集文件
猜你喜欢
随机推荐
Five minutes to teach you intranet penetration
【ManageEngine】网络带宽管理工具
六、一起学习Lua 循环
VirtualLab:Ince-Gaussian光束产生涡旋阵列激光束的观测
StratoVirt 中的虚拟网卡是如何实现的?
编程手册管理软件-涉及各类编程语言
TiSpark 原理之下推丨TiDB 工具分享
PlutoSDR学习指南【1】环境搭建+资料分享
MySQL --- storage engine
黑马瑞吉外卖之分类信息的分页查询
怎么了
单峰函数极值问题的解决方案 : 三分 & 二分与三分的本质区别
PlutoSDR学习指南【2】无线数据传输
App Clip 苹果小程序开发须知
【Opencv】-----倾斜图片转正
兴盛优选:时序数据如何高效处理?
PG--核心技术--HOT
PerfView专题 (第一篇):如何寻找热点函数
从抖音到火山引擎——看流媒体技术演进和机会
CSDN文章抓取