MySQL基础-事务

目录

1.事务简介

2.事务的操作

2.1 实验需要用到的数据

2.2 完成转账操作

修改事务执行方式

手动开启事务的方式

 3.事务的四大特性

4.并发事务问题

5.事务隔离级别

5.1 事务隔离级别分类

5.2 查看事务隔离级别

5.3 设置事务隔离级别


1.事务简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或者撤销操作请求,即这些操作要么同时成功,要么同时失败。其主要作用就是为了保证数据的统一性和完整性。

最典型的案例:当处理银行账户的转账操作时,可以使用事务来确保数据的一致性和完整性。假设有两个账户,账户A和账户B,我们想要从账户A向账户B转移一定金额。这时候的增加B账户的金额和减少A账户的金额就必须要同时成功,否则就会出现意外情况。

总结:当我们需要同时执行好几个sql语句,并且必须要确保所有的sql语句都运行成功,这时候才会修改数据库中的数据,否则当初临时修改的数据会执行回滚操作将修改的数据恢复回原来的数据。

2.事务的操作

2.1 实验需要用到的数据

创建一个账户表并且插入需要用到的数据

create table account(id int auto_increment primary key ,name varchar(10),money int
) comment '账户表';insert into account (id, name, money) values (null,'zs',2000),(null,'ls',2000);

2.2 完成转账操作

转账执行流程

查询被转账的账户余额----->被转账用户余额减少------>收入用户余额增加

没有采用事务时的执行基本执行流程

# 查询用户余额
select * from account where name = 'zs';
# 将 zs 的余额减少1000
update account set money = money - 1000 where name = 'zs';
# 将 ls 的余额增加1000
update account set money = money + 1000 where name= 'ls';

执行结果

现在这个执行结果是正确的

现在假设出现了异常情况

# 查询用户余额
select * from account where name = 'zs';
# 将 zs 的余额减少1000
update account set money = money - 1000 where name = 'zs';
出现错误 #语法错误
# 将 ls 的余额增加1000
update account set money = money + 1000 where name= 'ls';

这三句sql出现了明显的语法错误,第三句sql是无法执行的,因为前面已经出现了报错

这时候执行结果就会出现钱不见的问题,此时就需要结合事务来完成这个转账功能。

修改事务执行方式

mysql语句中每一句sql语句都是一个独立的事务,且它们都是自动执行的

此时我们可以手动的关闭事务自动提交,改为手动提交

select @@autocommit; # 查询提交方式,0为手动,1为自动
set @@autocommit = 0; # 修改提交方式为手动

这时候修改了事务提交的方式,此时在执行对应的sql语句就需要手动提交才可以修改数据

可以看到在我们执行完上面的三句sql后数据并没有修改

手动提交事务

commit;

执行完这条手动提交之后,数据库的数据就发生了变化

假如事务出现了异常,就再手动回滚数据

rollback;

手动开启事务的方式

# 开启事务
start transaction ;

其实现方式和修改事务的执行方式是一致的

执行完sql后数据不会发生改变,需要手动的提交事务,或者出现异常回滚事务

执行语句也是一样

commit; # 提交事务rollback; # 回滚事务

注意这里的提交以及回滚在开启的一个事务中只有一个能执行,假如已经提交了事务,代表此事务已经结束了,就不能在执行回滚事务了,但上面的修改事务的执行方式是可以多次执行的。

 3.事务的四大特性

  1. 原子性(Atomicity):事务是原子的,意味着它要么完全执行,要么完全回滚。如果事务中的任何一部分操作失败,整个事务都将被回滚,不会留下部分更改。

  2. 一致性(Consistency):事务开始前数据库必须处于一致状态,事务结束后,数据库也必须保持一致状态。这意味着事务应该满足预定义的约束,如唯一性约束、外键关系等。

  3. 隔离性(Isolation):多个事务可以同时执行,但它们应该被隔离,以防止互相干扰。数据库系统通常提供了不同的隔离级别,例如读未提交、读已提交、可重复读和串行化,以控制事务之间的可见性和互动。

  4. 持久性(Durability):一旦事务提交,对数据库的更改应该永久保存,即使发生系统崩溃或故障。

4.并发事务问题

脏读:在某些隔离级别下,一个事务可能会读取到另一个事务尚未提交的未确认数据,这被称为脏读。如果读取的数据最终被回滚,读取的数据就会变得无效。

不可重复读:在某些隔离级别下,一个事务可能会在同一个事务中的两次读取之间看到不同的数据,这被称为不可重复读。这可能是由于其他事务的修改导致的。

 

幻读:在某些隔离级别下,一个事务可能会在同一个事务中的两次查询之间看到不同数量的行,这被称为幻读。这是由于其他事务插入或删除行导致的。

 

5.事务隔离级别

5.1 事务隔离级别分类

  1. 读未提交(Read Uncommitted):最低级别,允许一个事务读取其他事务尚未提交的数据。这可能导致脏读、不可重复读和幻读等问题

  2. 读已提交(Read Committed):这是大多数数据库系统的默认隔离级别。在这个级别下,一个事务只能读取已经提交的数据,解决了脏读。但仍然可能发生不可重复读和幻读

  3. 可重复读(Repeatable Read 默认):在这个隔离级别下,一个事务在开始时会创建一个一致性的快照,然后在整个事务期间使用这个快照。这可以防止不可重复读和脏读,但仍然可能发生幻读。MySQL的InnoDB存储引擎默认使用这个隔离级别。

  4. 串行化(Serializable):最高级别,确保了最高程度的数据一致性。在这个级别下,事务之间彻底隔离,不会发生脏读、不可重复读或幻读。但是,它通常会导致性能下降,因为它需要更多的锁定和资源。

5.2 查看事务隔离级别

select @@transaction_isolation;

当前是默认的

5.3 设置事务隔离级别

set session transaction isolation level 隔离级别;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/97230.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android---GC回收机制与分代回收策略

目录 GC 回收机制 垃圾回收(Garbage Collection, GC) 垃圾回收算法 JVM 分代回收策略 1. 新生代 2. 老年代 GC Log 分析 引用 GC 回收机制 垃圾回收(Garbage Collection, GC) 垃圾就是内存中已经没有用的对象,JVM 中的垃圾回收器(Garbage Collector)会自…

[CISCN2019 华北赛区 Day1 Web5]CyberPunk 二次报错注入

buu上 做点 首先就是打开环境 开始信息收集 发现源代码中存在?file 提示我们多半是包含 我原本去试了试 ../../etc/passwd 失败了 直接伪协议上吧 php://filter/readconvert.base64-encode/resourceindex.phpconfirm.phpsearch.phpchange.phpdelete.php 我们通过伪协议全…

入侵防御系统(IPS)网络安全设备介绍

入侵防御系统(IPS)网络安全设备介绍 1. IPS设备基础 IPS定义 IPS(Intrusion Prevention System)是一种网络安全设备或系统,用于监视、检测和阻止网络上的入侵尝试和恶意活动。它是网络安全架构中的重要组成部分&…

设计模式 - 创建型模式考点篇:工厂模式、建造者模式

目录 一、创建型模式 1.1、工厂模式 1.1.1、简单工厂模式(非 23 种经典设计模式) 概述 案例 1.1.2、静态工厂(扩展) 1.1.3、工厂方法模式 概念 案例 1.2、建造者模式 1.2.1、概念 1.2.2、案例 1.2.3、建造者模式扩展&…

vue3使用知识点总结

一、vue3 项目搭建 npm 6.x npm init vitelatest myvue3 --template vuevue 3.2.26使用 element plus ui 框架 npm i -S element plus//全部引入 import ElementPlus from element-plus; import element-plus/dist/index.css; const Vue createApp(App); Vue.use(ElementPl…

腾讯会议录制没有声音?看完这篇你就懂了

“腾讯会议录制的视频怎么没有声音呀?老师用腾讯会议上网课,就想用腾讯会议内置的录屏功能录下来,可是录制的视频没有声音!真的服了,有没有人知道怎么解决的,帮帮忙。” 腾讯会议是一种常用的远程会议工具…

基于遗传算法的新能源电动汽车充电桩与路径选择(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

iTOP-RK3588开发板使用 tensorflow框架

TensorFlow 是一个软件库或框架,由 Google 团队设计,以最简单的方式实现机器学习和深度学习概念。它结合了优化技术的计算代数,便于计算许多数学表达式。TensorFlow 有以下 重要功能 - 它包含一个叫做张量概念,用来创建多维数组&…

【密评】商用密码应用安全性评估从业人员考核题库(五)

商用密码应用安全性评估从业人员考核题库(五) 国密局给的参考题库5000道只是基础题,后续更新完5000还会继续更其他高质量题库,持续学习,共同进步。 1001 单项选择题 下列分组密码认证模式中,使用密钥最少的…

深入浅出DAX:购买推荐及产品ABC分类分析

深入浅出DAX:购买推荐及产品ABC分类分析 DAX运算求值的三步骤。首先是检测筛选,然后将筛选功能应用于基础表格,最后计算结果。DAX中的筛选器函数是复杂且功能强大的函数。例如筛选函数可用于操作数据上下文来创建动态计算。 01、使用细节说…

Spring Boot如何配置CORS支持

Spring Boot如何配置CORS支持 CORS(跨源资源共享)是一种Web浏览器的安全性功能,用于控制网页上的脚本文件从不同的源加载其他网页资源。在开发现代Web应用程序时,通常需要跨域请求不同的资源,如API服务或其他Web应用程…

前端系列-1 HTML+JS+CSS基础

背景: 前端系列会收集碎片化的前端知识点,作为自己工作和学习时的字典,欢迎读者收藏和使用。 笔者是后端开发😶前端涉猎不深,因此文章重在广度和实用,对原理和性能不会过多深究。 1.html 1.1 html5网页结…

嵌入式处理趋势,第一部分:超集成MCU

当今的嵌入式微控制器(MCU)是协同和创新的惊人例子。单个芯片上可容纳30,000至2百万个门,直到最近,各种集成的组件和模块都被视为独立的高级IC。 例如,当前典型的MCU设备(下面的图1)可能包含以…

Quarto 入门教程 (1):简单介绍和资料汇总

本推文是 “手把手教你使用 Quarto 构建文档” 教程的第一部分,本文先介绍 Quarto 构建文档的原理;可创建的文档类型;对应的参考资源分享。 下一部分,会手把手介绍如何使用它(下次推文吧~)。 …

Springboot使用Aop保存接口请求日志到mysql(及解决Interceptor拦截器中引用mapper和service为null)

一、Springboot使用Aop保存接口请求日志到mysql 1、添加aop依赖 <!-- aop日志 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency> 2、新建接口保存数据…

排序算法之【归并排序】

&#x1f4d9;作者简介&#xff1a; 清水加冰&#xff0c;目前大二在读&#xff0c;正在学习C/C、Python、操作系统、数据库等。 &#x1f4d8;相关专栏&#xff1a;C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 &#x1f44d…

chrome窗口

chrome 窗口的层次&#xff1a; 父窗口类名&#xff1a;Chrome_WidgetWin_1 有两个子窗口&#xff1a; Chrome_RenderWidgetHostHWNDIntermediate D3D Window // 用于匹配 Chrome 窗口的窗口类的前缀。 onst wchar_t kChromeWindowClassPrefix[] L"Chrome_WidgetWin_…

《低代码指南》——低代码维格云服务菜单

简介​ 快速了解付费客户能够获得维格服务团队哪些服务,本篇内容不包含使用免费试用版本的客户。 了解维格表产品价格与功能权益:戳我看价格与权益​ 客户付费后能得到哪些服务项目?​ 常规服务项目:

一、Excel VBA 是个啥?

Excel VBA 从入门到出门一、Excel VBA 是个啥&#xff1f;二、Excel VBA 简单使用 &#x1f44b;Excel VBA 是个啥&#xff1f; ⚽️1. Excel 中的 VBA 是什么&#xff1f;⚽️2. 为什么 VBA 很重要&#xff1f;⚽️3. 是否有无代码方法可以在 Excel 中实现工作流程自动化&…

深挖 Python 元组 pt.1

哈喽大家好&#xff0c;我是咸鱼 好久不见甚是想念&#xff0c;2023 年最后一次法定节假日已经结束了&#xff0c;不知道各位小伙伴是不是跟咸鱼一样今天就开始“搬砖”了呢&#xff1f; 我们知道元组&#xff08;tuple&#xff09;是 Python 的内置数据类型&#xff0c;tupl…