mysql事务级别以及是如何实现的(锁)

本文详细介绍了数据库的ACID属性以及四种事务隔离级别:读未提交、读已提交、可重复读和串行化,分别阐述了它们对脏读、不可重复读和幻读的支持情况。在MySQL中,InnoDB引擎使用行锁和表锁实现事务隔离,而MyISAM则采用表锁。此外,还探讨了MVCC(多版本并发控制)的概念,如快照读和当前读。文章通过实例解释了MVCC如何避免并发问题,并给出了相关面试题。
摘要由CSDN通过智能技术生成

隔离级别:ACID

读未提交

读已提交

不可重复读

串行

  • 脏读:事务A读取到了事务B还未提交的数据
  • 不可重复读:事务A在多次读取某数据时,读取到了事务B已经提交(update、delect)的数据,导致事务A前后读取结果不一致
  • 幻读:事务A在多次统计数据时,统计到了事务B已经提交的insert数据,导致事务A的前后统计结果不一致

事务隔离级别

隔离级别

脏读

不可重复读

幻读

备注

读未提交 (Read UnCommitted)

N

N

N

 

读已提交(Read Committed)

Y

N

N

Oracle 默认级别

可重复读( RepeaTable Read)

Y

Y

N

mysql 默认级别

串行(Serializable)

Y

Y

Y

 

mysql是如何实现事务隔离级别的?

INNDB:表锁、行锁

MyISAM:表锁

 

加锁粒度

执行效率

冲突概率

并发性能

表锁

 

行锁

   

 

锁的模式

  • 共享锁 S锁 :读可重入,即多个事务可在同一行加锁,但是不能修改,如果想要修改,只能等待所有的S锁释放;

例子:select * from table lock in share mode;

小插曲:老师用动物园出入口的闸机举例子,说明读锁的必要性。我却在把闸机联想成了炸鸡!!!!

  • 排它锁 X锁:对某一资源进行修改时,只有此事务可以增删改查,其他事务都不能进行操作

例子:所有的DML语句自动带有排它锁;

  • 意向锁 :由共享锁/排他锁触发,是为了提高加表锁的效率;

锁的算法

 

 

MVCC:

会记录最大的事务id,transcation_id,也就是row_id

快照读

当前读:也就是修改的时候,会再读取一遍数据库中最新的数据

面试题:问Q1 Q2的输出值?age初始值为18

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值