ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL_事务

2021-06-06 00:02:12  阅读:125  来源: 互联网

标签:事务 演示 隔离 提交 MySQL balance 级别


文章目录

1.事务的应用场景说明

什么是事务: 在实际的开发过程中,一个业务操作如:转账,往往是要多次访问数据库才能完成的。转账是一个用户扣钱,另一个用户加钱。如果其中有一条 SQL 语句出现异常,这条 SQL 就可能执行失败。
事务执行是一个整体,所有的 SQL 语句都必须执行成功。如果其中有 1 条 SQL 语句出现异常,则所有的SQL 语句都要回滚,整个业务执行失败。

在这里插入图片描述

2.手动提交事务

MYSQL 中可以有两种方式进行事务的操作:

  1. 手动提交事务
  2. 自动提交事务

2.1 手动提交事务的 SQL 语句

在这里插入图片描述

2.2 手动提交事务使用过程:

在这里插入图片描述
在这里插入图片描述

2.2.1 案例演示1 :事务提交

在这里插入图片描述
在这里插入图片描述

2.2.2 案例演示 2:事务回滚

在这里插入图片描述
在这里插入图片描述

3 自动提交事务

在这里插入图片描述

3.1 案例演示 3:自动提交事务

在这里插入图片描述

3.2 取消自动提交

在这里插入图片描述

4 事务原理

事务开启之后, 所有的操作都会临时保存到事务日志中, 事务日志只有在得到 commit 命令才会同步到数据表
中,其他任何情况都会清空事务日志(rollback,断开连接) 

5 事务的隔离级别

5.1 事务的四大特性 ACID

在这里插入图片描述

5.2 事务引发并发访问的问题

在这里插入图片描述

5.3 MySQL 数据库有四种隔离级别

在这里插入图片描述

5.4 MySQL 事务隔离级别相关的命令

设置事务隔离级别,需要退出 MySQL 再重新登录才能看到隔离级别的变化

设置隔离级别 set global transaction isolation level 级别字符串;

5.5 脏读的演示

将数据进行恢复:UPDATE account SET balance = 1000;

  1. 打开 A 窗口登录 MySQL,设置全局的隔离级别为最低
mysql -uroot -proot
set global transaction isolation level read uncommitted;

在这里插入图片描述
2. 打开 B 窗口,AB 窗口都开启事务

use day23;
start transaction;

在这里插入图片描述
3. A 窗口更新 2 个人的账户数据,未提交

update account set balance=balance-500 where id=1;
update account set balance=balance+500 where id=2;

在这里插入图片描述
4. B 窗口查询账户

select * from account;

在这里插入图片描述
5. A 窗口回滚

rollback;

在这里插入图片描述
6. B 窗口查询账户,钱没了
在这里插入图片描述
解决脏读的问题:将全局的隔离级别进行提升
将数据进行恢复:

UPDATE account SET balance = 1000;
  1. 在 A 窗口设置全局的隔离级别为 read committed
set global transaction isolation level read committed;

在这里插入图片描述
8. A 更新 2 个人的账户,未提交

update account set balance=balance-500 where id=1;
update account set balance=balance+500 where id=2;

在这里插入图片描述
9. B 窗口查询账户
在这里插入图片描述
4. B 窗口查看账户

5.6 不可重复读的演示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.7 幻读的演示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签:事务,演示,隔离,提交,MySQL,balance,级别
来源: https://blog.csdn.net/qq_40635134/article/details/117607159

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有