mysql基础篇之事务

        mysql事务,默认是自动提交(autocommit=1),就不能回滚事务。插入一条数据,rollback无法回滚;(1)但是设置set autocommit=0之后,插入可以回滚到之前状态,这个时候在手动commit一下,则rollback无法回滚了。体现了事务的持久性,一旦提交或者回滚持久生效的,其次事务提供给了我们一个返回的机会。事务还可以手动开启:(2)star transaction;(3)begin。手动开启可以回滚,commit之后则不可回滚。

        事务有四大特征:1. 原子性:是不可分割的最小操作单位,要么同时成功,要么同时失败。2. 持久性:当事务提交或回滚后(即事务一旦结束),数据库会持久化的保存数据。3. 隔离性:多个事务之间。相互独立。4. 一致性:事务操作前后,数据总量不变(小名小王互相转账,出了问题但是共2000不会变)。

       事务 隔离级别:

        1. read uncommitted:读未提交:a事务对数据进行操作,但操作之后没有提交,但是b可以看到a操作之后的结果。小明和网铺主,小明开始事务,付款了800,网铺主看到钱到账了就没管了。结果小明事后rollback,签回来了白嫖一波,网铺主亏大了。

* 产生的问题:脏读、不可重复读、幻读。 

        2. read committed:读已提交 (Oracle):只能读到另一个事务提交的数据,但还是会出现问题。读同一张表,前后数据不一致。小王会计要算某系统内money的平均值,查出数据之后去上厕所了,这个时候小红往里面加了一个账户存了100.小王回来算平均值就发现不对。

* 产生的问题:不可重复读、幻读 。

        3. repeatable read:可重复读 (MySQL默认)

* 产生的问题:幻读。

        4. serializable:串行化

* 可以解决所有的问题,性能最差。隔离级别越高,性能越差

【术语】并发事务遇到的问题

脏读:一个事务读取到了另一个事务没有提交的数据,就叫做脏读。在开发中不允许这种情况。

不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同。

幻读:一个事务在按照条件查询数据的时候,没有对应的数据行,但是在插入的时候,又发现这条数据已经存在,好像出现了幻影,就叫做幻读。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值