MySQL事务和锁机制详解-图解1

目录

B站视频:MySQL事务和锁机制详解:

B站视频:深入浅出MySQL两大知识点:事务与锁:

B站视频:java 深入理解Mysql锁与事务隔离级别

1、事务并发带来的三大问题:脏读、不可重复读、幻读

1.1 脏读问题

1.2 不可重复读问题

1.3 幻读问题

1.4 三大问题的总结

2、事务的四种隔离级别

2.1 MySQL中InnoDB存储引擎对事务隔离级别的支持程度

2.2 应该怎么做才能解决读一致性问题(保证一个事务中前后两次读的数据一致)

3、MySQL中的各种锁

3.1 表锁与行锁的区别

3.2 MySQL中InnoDB和MyIsam存储引擎分别支持什么粒度的锁

3.3 共享锁与排它锁、意向共享锁与意向排它锁 的含义与加锁/释放锁方式

3.3.1 共享锁(S锁、读锁)

3.3.2 排他锁(X锁、写锁)

3.3.3 意向共享锁(IS锁)与意向排它锁(IX锁)

3.3.4 思考:为什么需要表级别的意向锁?

3.3.5 锁的作用:锁到底锁住了什么?

主键索引和辅助索引的图解

索引的本质是什么?

带主键的建表SQL语句

记录、间隙、临键的图解

记录锁:锁定记录

间隙锁:锁定范围

临键锁:锁定范围+记录

InnoDB事务隔离级别的实现:RU/S/RR/RC

1、数据库事务的基本概念

2、事务的四大特点ACID

3、事务ACID的实现原理

3.1 原子性的实现原理:undo log(是一个逻辑日志)

3.2 持久性的实现原理:redo log(是新增数据的备份)

3.2.1 数据更新的流程(redo log 的两阶段提交:prepare阶段与submit阶段)

3.2.2 反面论证为什么 redo log 要进行两阶段提交

4、MySQL的隔离级别

4.1 并发事务带来的问题:脏读/不可重复读/幻读

4.2 InnoDB的行锁模式与加锁方法

4.2.1 InnoDB行锁的实现方式与SQL演示(重要)

4.3 总结:MyISAM与InnoDB

4.4 MySQL中的死锁演示

4.5 隔离性的实现原理:锁

4.6 故障及故障恢复

B站视频:MySQL事务和锁机制详解:

https://www.bilibili.com/video/BV1x54y1979n?from=search&seid=14928286168592339456

B站视频:深入浅出MySQL两大知识点:事务与锁:

https://www.bilibili.com/video/BV1x54y1979n?from=search&seid=14928286168592339456

B站视频:java 深入理解Mysql锁与事务隔离级别

https://www.bilibili.com/video/BV164411p7nk?p=1

1、事务并发带来的三大问题:脏读、不可重复读、幻读

1.1 脏读问题

【脏读的定义】在一个事务中读取了另外一个事务还没有提交的数据,如果另外一个事务做了数据回滚操作,那么第一个事务读取的数据就是脏数据,这会导致业务出错。这个现象就是脏读。

简单解释:对于两个事务TA和TB,TA读取了 已经被TB更新但是还没有被提交的数据,如果此时TB做了回滚操作,那么TA读取的内容就是脏数据 18。

1.2 不可重复读问题

【不可重复度的定义】在一个事务的前后两次查询中,前后两次查询出来的数据不一致,这可能是因为在前后两次查询的过程中 插入了另外一个事务提交的内容,这个提交的内容可以是:更新了原有的数据,或者是删除了原有的数据。这个现象就是不可重复读。

简单解释:对于两个事务TA和TB,TA读取了一个字段,然后在TB中对该字段做了更新操作并且提交了,TA再次读取该同一个字段时,发现该字段的值和之前的不一样了,是18。

1.3 幻读问题

【幻读的定义】在一个事务的前后两次范围查询中 数据的笔数不一致。例如:事务1查询了几行数据,而另外一个事务2却在此时插入了新的几行数据并且提交了,那么先前的事务1在接下来的同样的范围查询中 就会发现有几行数据是新的,是之前那次查询中所没有的,这个现象就是幻读。

【简单解释】对于两个事务TA和TB,TA从表中读取数据,然后TB进行了insert操作并且提交了,当TA再次使用相同的范围查询时,发现前后两次读取的结果不一致,有新增的数据出现,count=2。

1.4 三大问题的总结

2、事务的四种隔离级别

2.1 MySQL中InnoDB存储引擎对事务隔离级别的支持程度

2.2 应该怎么做才能解决读一致性问题(保证一个事务中前后两次读的数据一致)

3、MySQL中的各种锁

3.1 表锁与行锁的区别

3.2 MySQL中InnoDB和MyIsam存储引擎分别支持什么粒度的锁

(1)innoDB存储引擎:支持行锁与表锁。

(2)MyISAM存储引擎:只支持表锁。

3.3 共享锁与排它锁、意向共享锁与意向排它锁 的含义与加锁/释放锁方式

(1)行级别的锁:共享锁(S锁)与排他锁(X锁)。

(2)表级别的锁:意向共享锁(IS锁)与意向排他锁(IX锁)。

3.3.1 共享锁(S锁、读锁)

3.3.2 排他锁(X锁、写锁)

3.3.3 意向共享锁(IS锁)与意向排它锁(IX锁)

3.3.4 思考:为什么需要表级别的意向锁?

(1)首先,一个事务成功的给一张表加上表锁的前提是:没有任何其他事务已经锁定了该表的任意一行数据。

(2)那么,怎么知道 “没有任何其他事务已经锁定了该表的任意一行数据” 呢 ?这就需要全表扫描去做检测,太费时。

(3)所以,使用意向锁的目的就是 提高加表锁的效率,可以把它当做一个表有没有被锁上的标识。这也就是说,直接看这张表有无意向锁,如果没有,则可以加表锁;如果有,则说明该表已经被其他事务加了表锁,当前事务只能够等待。

  

3.3.5 锁的作用:锁到底锁住了什么?

主键索引和辅助索引的图解

索引的本质是什么?

聚集索引:索引的逻辑顺序决定了表中数据的存储顺序,所以一个表中一定有一个聚集索引。

带主键的建表SQL语句

记录、间隙、临键的图解

记录锁:锁定记录

间隙锁:锁定范围

 

临键锁:锁定范围+记录

InnoDB事务隔离级别的实现:RU/S/RR/RC

 

下面内容来自B站视频:https://www.bilibili.com/video/BV18p4y1D7ag?p=1

1、数据库事务的基本概念

2、事务的四大特点ACID

3、事务ACID的实现原理

3.1 原子性的实现原理:undo log(是一个逻辑日志)

3.2 持久性的实现原理:redo log(是新增数据的备份)

3.2.1 数据更新的流程(redo log 的两阶段提交:prepare阶段与submit阶段)

(1)数据log,日志log。

(2)数据从 进程内存 ——> 操作系统内存 ——> 磁盘,最终落地到磁盘中。

(3)并不是来一条数据就写一次磁盘,而是当数据量达到某一个阈值之后 再一次性做批处理,统一写到磁盘中。

3.2.2 反面论证为什么 redo log 要进行两阶段提交

4、MySQL的隔离级别

RC隔离级别:

RR隔离级别:

隐藏的三列:_rowid、createTime、deleteTime

4.1 并发事务带来的问题:脏读/不可重复读/幻读

4.2 InnoDB的行锁模式与加锁方法

4.2.1 InnoDB行锁的实现方式与SQL演示(重要)

4.3 总结:MyISAM与InnoDB

4.4 MySQL中的死锁演示

select @@autocommit;  set autocommit=off;  set autocommit=on;

mysql官网:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html

4.5 隔离性的实现原理:锁

4.6 故障及故障恢复

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值