MySQL---事务篇

目录

1:事务的理解

2:提交事务和回滚事务

3:事务隔离级别

        (1)读未提交

        (2)读已提交 

        (3)可重复读

​        (4)序列化


1;事务的理解

对于事务的理解呢,该怎么说呢。嗯...举个例子吧,银行转账的话,a账户转给b账户100块,那么a账户减少100元,b账户增加100元,这个操作要么同时失败要么同时成功,这就是一个简单的事务。

对于事务我们用到的都是DML语句(具体点就是update,insert,delete)。

事务开启了:
insert...
insert...
update...
delete...
insert...
update...
...

事务结束!

在事务的执行过程中,每一条DML的语句操作都会记录在“事务性活动的日志文件中”
在事务的执行过程中,我们可以提交事务,也可以回滚事务(粗略地可以理解成撤销)

提交事务标志事务的结束,并且事务成功的结束

回滚事务将之前所有的DML操作全部撤销,并且情况事务性活动的日志文件,
回滚标志着事务的结束,但却是失败的结束。

2:提交事务和回滚事务

提交事务语句: commit;

回滚事务语句: rollback;

 大家看到上面的图片应该会产生疑问,为什么回滚没有用呢?

这就说到了MySQL中的默认事务行为了
在正常情况下,MySQL默认是支持自动提交的(每写一条DML语句,直接提交)

如何将MySQL中的自动提交事务给关闭呢?
需要这个命令:start transaction;

关闭自动提交事务之后就可以愉快滴回滚啦!!! 

上面这张图表示commit提交后,rollback只能回滚到这了。

3:事务隔离级别

事务隔离级别有四种(在这里我列举两个事务,就叫他们a和b了)
(1)读未提交  read uncommitted(最低的隔离级别)
     比如说a可以读到b中还未提交的数据(所以一般数据库不用这种隔离级别,一般都是从二号开始的)
(2)读已提交  read committed
     a只能读到b提交的数据
     
(3)可重复读  repeatable read
     就是第一次读的数据,你后面读的话,还是还会读它,这就叫可重复读
(4)序列化    serializable    (最高的隔离级别)
      嗯...就是事务之间是有顺序的,一个事务没有提交结束之前,另外一个事务无法进行操作


查看隔离级别的命令
select @@transaction_isolation;(我的是MySQL80,用这个命令,别的版本可能就不是了)

下面开始验证,所以开两个窗口表示两个事务

注意在验证的时候一定要记得修改隔离级别啊!!!
还有要记得关闭自动提交事务(start transaction),然后再退出MySQL,重新进入


修改隔离级别命令:set global transaction isolation level 隔离级别(如read uncommitted)


(1)读未提交

假设stu中是空表
a:                                b:
select *from stu;
                                       insert into stu values('jk',18);



//b表中还未提交,但是却可以查到
select *from stu;

(2)读已提交 

修改隔离级别别忘了




a:                                         b:
start trancsaction;

select *from stu;//空表                        
                                            insert into stu values('iui',10);
select *from stu;//空表

                                            commit;

select *from stu;//b事务提交之后,查到了表

(3)可重复读


a:                                          b:
start transaction;                             start transaction;

select *from stu;//表中之前的内容
                                               insert into stu values('89',9);
select *from stu;//表中不变
                                               commit;
select *from stu;//表中的内容还是不变,那么这个隔离级别就可以暂且理解成给我们造成一种幻想,实际
早已发生了改变了

 (4)序列化


a:                                    b:
start transaction;                       stat transaction;

select *from stu;//正常查询
delete from stu;//删除数据
select *from stu;//查出来是空表

                                        select *from stu;//光标不懂,无法进行操作


commit;

                                          //不需要输入任何东西,a事务中commit提交事务之后
                                           b事务这里直接出现上一条命令的结果,即查询是空表

序列化,那么理解的话不就是排队吗(哈哈哈)

本文到此结束,如有错误,还请指正哈!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜到极致就是渣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值