前言

嗨咯,小伙伴们大家好呀,我已经一个星期没有更新了,实在抱歉!本期我们要学习MySQL初阶中的最后一课,MySQL数据库中的事务也算是近几年面试必考的问题,所以我们一定要认真学习。

目录

前言

目录

一、事务的简介

二、事务操作

2.1 查看/设置事务提交方式

2.2 手动开启事务

2.3 提交事务

2.4 回滚事务

2.5 案例练习

2.5.1 查看MySQL事务

2.5.2 银行转账模拟练习

2.5.2.1 创建余额表

2.5.2.2 模拟转账流程 李白给杜甫转账1000元 (自动提交事务模式)

2.5.2.3 模拟转账流程 李白给杜甫转账1000元 (手动提交事务模式)

三、事务的四大特性

四、并发事务问题与事务的隔离级别

4.1 并发事务的问题

4.2 事务的隔离别

4.3 相关语句

4.3.1 查看事务的隔离界别

4.3.2 设置事务的隔离界别

4.4 实战练习

4.4.1 打开两个客户端进行操作​编辑

4.4.2 查看事务隔离级别

4.4.3 查看当前表中的数据

4.4.4 在另一个客户端进行更新操作

4.4.5 再另一个客户端进行查询操作

4.4.6 设置事务隔离级别为read committed

4.4.7 设置为repeatable read

4.4.8 设置事务的隔离级别为serializable;

五、总结


一、事务的简介

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

普法课堂:法外狂徒”张三“昨天偷了李四5000元存入银行中,张三第二天良心发现犹豫再三决定告诉李四这件事情。李四听了这件事情后决定给张三一个重新做人的机会。只要张三把钱归还给自己,之前的事情既往不咎。张三也在第二天匆匆地赶去银行把自己账户中的5000元通过银行转账归还给李四。张三查了查自己的账户里边有5000元。

现在我们想一下转账的流程:张三账户-5000元——>李四的账户+5000元。

张三在银行中的确把所偷盗的五千元转给了李四。银行的工作人员说最晚48小时内李四就可以收到,但是时间一转眼过去了一周,李四没有收到张三归还的五千元,李四报了警!

最后因为银行系统出现故障导致李四无法收到转账!最后请问张三构成犯罪吗?这就是我们今天要学习的事务,要么张三银行账户-5000,李四银行账户+5000,要么张三账户不扣钱,李四也不加钱。

注意:默认MvSQL的事务是自动提交的,也就是说,当执行一条DML(insert、update、delete、select)语句,MvSQL会立即隐式的提交事务。

二、事务操作

2.1 查看/设置事务提交方式

select @@autocommit;

2.2 手动开启事务

start transaction;
begin;

2.3 提交事务

commit;

2.4 回滚事务

rollback;

2.5 案例练习

2.5.1 查看MySQL事务
select @@autocommit;

为1表示自动提交,为0表示需要手动提交事务,改为手动之后再提交事务时候必须使用commit,同时也需要自己进行回滚。

2.5.2 银行转账模拟练习
2.5.2.1 创建余额表

表结构如下

create table account
(id    int auto_increment primary key comment '用户id',name  varchar(10) comment '姓名',money int comment '余额'
);

添加数据

insert into account values('001','李白',5000),('002','杜甫',3000),('003','白居易',2500);
2.5.2.2 模拟转账流程 李白给杜甫转账1000元 (自动提交事务模式)

1.查询李白的账户

select * from account where name='李白';

2.李白的账户减去1000

update account set money=money-1000 where name='李白';

3.杜甫的账户增加1000

update account set money=money+1000 where name='杜甫';

4.查询账户表

select * from account;

2.5.2.3 模拟转账流程 李白给杜甫转账1000元 (手动提交事务模式)

设置MySQL为自动提交事务,设置autocommit为0。

set @@autocommit=0;

1.开启事务

start transaction;

以下插入数据对数据进行操作的流程同2.5.2.2。

执行出错,要对事务进行回滚。要么全部执行,要么一个也不执行。

n.提交事务

commit;

三、事务的四大特性

原子性:(Atomicity): 事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

一致性:(Consistency):事务完成时,必须使所有的数据都保持一致状态。

隔离性:(lsolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

持久性:(Durability): 事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

!!!面试的时候容易考

四、并发事务问题与事务的隔离级别

4.1 并发事务的问题

4.2 事务的隔离别

注意: 事物的隔离级别越高,数据越安全,但是性能越低。 需要去权衡数据的安全性和并发性,进行设置事物的隔离级别。

4.3 相关语句

4.3.1 查看事务的隔离界别

select @transaction_isolation;

4.3.2 设置事务的隔离界别

set
[session/global] transaction isolation level [read uncommitted | read committed |repeatable read |serializable];

4.4 实战练习

4.4.1 打开两个客户端进行操作
4.4.2 查看事务隔离级别
select @@transaction_isolation;

事务的隔离级别为默认值.

set session transaction isolation level read uncommitted;
4.4.3 查看当前表中的数据

4.4.4 在另一个客户端进行更新操作
set session transaction isolation level read uncommitted;
4.4.5 再另一个客户端进行查询操作

因为另一个客户端没有进行commit提交操作所以出现脏读。

4.4.6 设置事务隔离级别为read committed
set session transaction isolation level read committed;

提交事务之前于提交事务之后查询的李白的money不相同出现了不可重复读。

4.4.7 设置为repeatable read
set session transaction isolation level repeatable read;

在一个客户端查询id=4是否存在

select * from account where id='4';

在另一个客户端插入一条数据

select * from account where id='4';

在第一个客户端插入数据出现错误,但是查询id=4的仍然为空

select * from account where id='4';

出现幻读现象

4.4.8 设置事务的隔离级别为serializable;

当一个事务提交之后完毕之后另一个事务才开始执行,规避了幻读的问题。

注意:事务的隔离级别越高,数据越安全,但是性能越低。

五、总结

在过去的一段时间里,我一直与大家分享关于MySQL数据库的知识和经验。我希望这些博文能够帮助你们更好地理解和应用MySQL,提升你们在数据库领域的技能。 然而,我认为现在是时候告别了。

我已经完成了初级阶段的博文学习,我相信你们已经掌握了一些基本的MySQL知识,并能够应用到实际项目中。 在这个阶段结束之际,我想向你们表达我的感激之情。感谢你们一直以来的支持和鼓励,是你们的反馈和建议让我不断进步。我也希望你们能够继续保持学习的热情,不断提升自己的技能。

如果你们还有任何关于MySQL数据库的问题,可以随时在评论区留言,我会尽力回答。同时,我也鼓励你们互相交流和分享,共同进步。 最后,我想再次感谢你们的支持和陪伴。希望我们能够在其他的学习领域再次相遇。 再见!

【MySQL】不就是事务相关推荐

  1. mysql如何查看事务日记_MySQL中的几种日志了解

    前言 MySQL中有以下日志文件,分别是: 1:重做日志(redo log) 2:回滚日志(undo log) 3:二进制日志(binlog) 4:错误日志(errorlog) 5:慢查询日志(slo ...

  2. mysql中不同事务隔离级别下数据的显示效果--转载

    事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...

  3. mysql语句中事务可靠性_MySql的事务使用与示例详解

    在MySQL中,事务就是一个逻辑工作单元的一系列步骤.事务是用来保证数据操作的安全性. 事务的特征: 1.Atomicity(原子性) 2.Consistency(稳定性,一致性) 3.Isolati ...

  4. 事务,Oracle,MySQL及Spring事务隔离级别

    一.什么是事务:  事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 二.事务特性(4种):  原子性 (atomicity):强调事务的不可分割: 一致性 (consi ...

  5. 10.MYSQL:什么是事务?事务的性质?事务的应用?

    所谓事务,其实就是相当于操作系统里的原子性操作.它将一组对于数据库表的操作绑定在一起,只有所有操作都成功,才提交,只要有一个操作失败的话,那么就不会提交.这样的机制保证了数据库数据的原子性.一致性.隔 ...

  6. mysql四种事务隔离级别

    mysql事务并发问题 ACID什么的就不啰嗦了.mysql多个事务并发的时候,可能会出现如下问题: 1. 更新丢失 即两个事务同时更新某一条数据,后执行的更新操作会覆盖先执行的更新操作,导致先执行的 ...

  7. MySQL多表事务课堂笔记

    今日内容 1. 多表查询2. 事务3. DCL 多表查询: * 查询语法:select列名列表from表名列表where.... * 准备sql# 创建部门表CREATE TABLE dept(id ...

  8. MySQL事务处理与事务隔离(锁机制)

    转载:http://blog.csdn.net/qq_26525215/article/details/52146529 MySQL 事务处理 简单介绍事务处理: MySQL 事务主要用于处理操作量大 ...

  9. mysql 并发_Mysql事务,并发问题,锁机制

    1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成功,要不全部撤销 隔离性:事务之间相互独立,互不干扰 一致性:数据库正确地改变状态后,数据库的一致性约 ...

  10. MySQL存储过程之事务管理

    MySQL存储过程之事务管理 ACID:Atomic.Consistent.Isolated.Durable  存储程序提供了一个绝佳的机制来定义.封装和管理事务. 1,MySQL的事务支持  MyS ...

最新文章

  1. R语言ggplot2可视化强制指定X轴的日期范围实战:组合条形图和lm模型构建的回归模型的结果并强制指定X轴的日期范围
  2. sql serve存储过程
  3. UA MATH566 统计理论8 用Pivot构造置信区间
  4. 项目实践精解:C#核心技术应用开发
  5. Android之android studio如何把项目分享到github并提修改的代码到Github
  6. 图论复习——最小生成树MST
  7. vue跳转传参刷新后参数消失
  8. java向mysql插入数据乱码问题解决
  9. GIT回滚master分支到指定tag版本 并提交远程仓库
  10. AD10操作技巧及参数
  11. linux下telnet工具下载,telnet.exe下载
  12. win10pe命令打开计算机,手把手教你如何制作win10PE启动盘
  13. Dilated Convolution —— 空洞卷积(膨胀卷积)
  14. 2021-06-29 连续非空子序列
  15. flashback六大技术之flashback query
  16. Vuex 4源码学习笔记 - 做好changelog更新日志很重要(十)
  17. C# Excel 数据导入mysql数据库
  18. 制作Code128B一维条形码的综合教程
  19. 视频服务器托管如何选择数据中心
  20. 【Ubuntu16.04】ROS · Kinetic安装 · 图文教程与问题详解

热门文章

  1. 我们真的缺前端工程师吗
  2. .net core api 图片上传与加载
  3. 【渝粤教育】国家开放大学2019年春季 0505-22T护理学基础 参考试题
  4. python括号匹配o(1)复杂度_Python面试题:使用栈处理括号匹配问题
  5. Java、JSP二手手机收售系统
  6. 专题·树链剖分【including 洛谷·【模板】树链剖分
  7. APP性能测试,你需要关注哪些指标?
  8. java equals方法详解
  9. js字符串转换为对象格式的3种方法
  10. 毕业后的第一份工作选择有多重要?