mysql 默认事务隔离级别_mysql 事务隔离级别 锁

c4a5f278d33c8790f841499e05004c8f.png

事务

事务是一种工作机制,他将所有要执行的操作,放到一个不可分割的执行单元里。当所有操作都完成,这个事务才叫完成,否则需要回滚,回到最初的状态。

事务四大特性:ACID

  • 原子性(atomicity)

一个事务要么全部提交成功,要么全部失败回滚。

  • 一致性(consistency)

一个事务在执行之前和执行之后,数据完整性一致。eg.A有1000元给B转200,B本来有800,现在变为1000元 前:A+B=1800元 后:800+1000=1800,数据始终在1800元,最终一致性不变。

  • 隔离性(isolation)

指在并发条件下,每个事务执行操作都是独立,对其他事务是不可见的。就如隔离了一样,隔离分为4个隔离级别,Read Uncommitted、Read committde、Repeatabl Read ,serializable。

在事务中不同个隔离级别是为了解决某些问题的,一般会出现如下3个问题

脏读,不可重复,幻读。

  • 脏读:同时有A,B两个事务 ,只要B事务有增删改等操作时,A可以立马读到,如果B事务可能会回滚,或者其他操作,A这时候读到的数据可能是脏数据,所以被称为脏读。
  • 不可重复读:同时有A,B两个事务,B事务插入提条数据,A这时候select没有B刚刚插入的数据,如果B提交了。A再次select,突然有了。
  • 幻读:同时有A,B两个事务,ide是主键,B 插入了一条id=10的数据,提交了 。A :select * from b where id=10; 结果为null,发现没有id=10的数据,他就插入一条id=10数据,发现insert不进去,说主键重复。A又select一次,发现还是没有id=10的数据,可就是insert不进去,就和幽灵一样,所以称为幻读

脏读,不可重复读的区别。不可重复读只有在其他事务提交了,多次select的状态才会改变。

幻读,不可重复读,针对的都是另一方已经提交的事务,不可重复读,对其他已经提交的事务,select会发现和上次不一样。而幻读select都是一样。不过如果别人新增了id=10,他虽然select没有看到,但就是insert不进去。

下面是来自CSDN的一张图:https://blog.csdn.net/dengjili/article/details/82468576

a5cdf766472e4dd3484b408c2db08217.png

事务不等于锁,事务的保证是靠 undo log+策略(隔离级别),为了保证策略的完成才加锁的, 持久化是靠redo log

按占用方式分

无锁:不加锁

按锁的粒度分

行级锁 

2d1477c141333e68a92ad15151fe109c.png
  • 持久性(durability)

一旦数据提交,这些数据就会永久的保存在数据库中(你删了不算),即使断电,mysql宕机,再重启后他也会将数据恢复。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值