前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL--事务

MySQL--事务

作者头像
用户10787181
发布2023-10-28 10:49:48
1950
发布2023-10-28 10:49:48
举报
文章被收录于专栏:小龙学编程小龙学编程

事务

15.1 基础知识

mysql默认自动事务提交,事务面对增,删,改操作时的一种控制手段,当面对一次操作多条记录,或都多个连接同时操作一条记录时的统一性管理手段,控制的是,增,删,改操作是否有效

查看刚当mysql的自动事务提交:

show session variables like '%autocommit%'

MySQL--事务_回滚
MySQL--事务_回滚

自动事务提交代表着,当执行insert update delete语句时会决定结果立即发生变化

1、关闭自动事务提交

set @@autocommit=0;

2、开启一个新的事务

start transaction;

3、执行增,删,改操作

insert into student values(null,'123123','梅澳','男',3,'13312344333','重庆市',now(),null,null,null); update student set address='重庆市石桥铺',email='33333@qq.com' where studentNo=37;

4、根据情况决定是提交还是回滚

commit; 提交

rollback; 回滚

select ROW_COUNT(); ROW_COUNT();执行增,删,改操作的SQL语句时如果执行成功返回大于0的结果,执行失败返回0

银行转账案例:

代码语言:javascript
复制
set @@autocommit=0;
start transaction;
update mybank set bank=bank-500 where id=1;
select ROW_COUNT();
update mybank set bank=bank+500 where id=3;
select ROW_COUNT();
commit;

rollback;
##根据select ROW_COUNT();来判定是否要提交还是回滚

创建还原点:

savepoint 名称; 创建还原点

rollback to 还原点名称; 回滚到还原点上,原点以下的操作回滚,还原点以上的操作提交

案例:

代码语言:javascript
复制
start transaction;
insert into mybank values(null,'张三',100);
savepoint a1;
insert into mybank values(null,'李四',200);
savepoint a2;
insert into mybank values(null,'王五',300);
savepoint a3;
insert into mybank values(null,'朱六',400);
rollback to a2;
commit;

15.2 事务的基本要素

原子性(Atomicity):

事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。

一致性(Consistency):

事务开始前和结束后,数据库的完整性约束没有被破坏 。比如A向B转账,不可能A扣了钱,B却没收到。

隔离性(Isolation):

同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。(相当于多线程中的上锁)

持久性(Durability):

事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

15.3 并发问题

脏读:

事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据

不可以重复读

事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

幻读

事务A在一个事务中查询数据,第一次查询出现两条,同时事务B在添加数据并提交,事务A再次查询数据出现了3条,这时就叫幻读

15.4 隔离级别

MySQL--事务_回滚_02
MySQL--事务_回滚_02

REPEATABLE-READ 这是mysql默认的事务隔离级别

show session VARIABLES like '%tx_isolation%' 查看当前会话的事务隔离级别

set session TRANSACTION ISOLATION level read uncommitted; 修改当前会话的事务隔离级别为读未提交

案例:

MySQL--事务_并发问题_03
MySQL--事务_并发问题_03
MySQL--事务_回滚_04
MySQL--事务_回滚_04
MySQL--事务_并发问题_05
MySQL--事务_并发问题_05
MySQL--事务_事务隔离级别_06
MySQL--事务_事务隔离级别_06

事务 B对修改回滚以后,事务A又读取到以前的数据了,这就是脏读。 

不可重复读就是在这个过程中把rollback变成了commit。事务A可以读取到事务B提交后的数据,这是不可重复读。

幻读就是事务B在添加后进行了commit,事务A多次读取的记录的数量不一致,这就是幻读。

set session TRANSACTION ISOLATION level repeatable read; 修改事务为默认级别,幻读已经解决。

set session TRANSACTION ISOLATION level read committed; 修改当前会话的事务隔离级别为不可重复读

set session TRANSACTION ISOLATION level serializable; 修改事务为串行化,效率低下

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 事务
    • 15.1 基础知识
      • 15.2 事务的基本要素
        • 15.3 并发问题
          • 15.4 隔离级别
          相关产品与服务
          云数据库 MySQL
          腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档