开课mysql------------表锁,行锁,索引--------03

表锁分为:表锁和元数据锁。

---------------------------------------------------------------------------------------------

rc rr等只是针对的当前读的。

---------------------------------------------------------------------------------------------

最左前缀:

两阶段锁:

----------------------------------------------------------

分类:全局锁表锁行锁。

表锁的总结:

----

元数据锁不是我们自己控制的,是mysql自动加的。

在元数据锁不是这么认为了:DML和DQL是读锁。DDL是写锁。元数据锁与其他锁不冲突。

 

表锁是在mysql的server层实现的。

-------------------------------------------------------------------------------------------------------------------------------------------------

下面说行锁:是存储引擎层实现的。

行锁也是两种实现的:

MVCC:多版本的并发控制,通过对一条记录记录多个版本的方式,但是这样的话读是不加锁的。读不加锁,读写不冲突。

知识点:行锁其实是针对索引加锁的。InnoDB存储引擎,索引和数据都是存储在一起的,索引建表。B+树建表。加锁是针对B+树的叶子节点加锁的。

LBCC:基于锁的并发控制,隔离级别有关系的。隔离级别为串行化的时候才会有基于锁的并发控制。读加读锁,写加写锁。

行锁的基本演示:

InnoDB的表必须有主键,没有的话会自动加。

b没有加索引的话由行锁升级为表锁。但是InnoDB会优化的,就是加锁解锁,加锁解锁......而不是2pc

---------------------------------------------------------------------------------------------------------------------------------------

事务是事务,锁是锁,不要弄混了。事务的隔离级别可能通过锁实现的。

重点:

------------------------------------------------------------------------------------------------------------------------------------------

下半节课:只有在InnoDB才支持事务。

在常用的存储引擎中,只有InnoDB存储引擎才支持事务。
执行DDL、DML、DCL语句时,事务默认是自动提交的
事务必须拥有四大特性:A(原子性:原子操作是不可分割的,在执行完毕不会被任何其它任务或事件中断)、C(一致性)、I(隔离性)、D(持久性)
数据库并发问题:
   脏读:A事务未提交,但是B事务看到了A事务中未提交的数据。
   不可重复读:针对同一条记录的。事务A对该记录,发生update操作时,事务B在事务A update操作前
后看到的该记录是不一致的。
   幻读:针对同一张表。事务A对该记录,发生insert\delete操作时,事务B在事务A insert\delete操
作前后看到的记录条数是不一致的。
      如何解决以上的问题呢?通过事务的隔离性(Isolation)来解决的,MySQL的隔离性有四种级别的,每一个
级别都会对应去解决以上的并发问题。
隔离级别由低到高,如下(高隔离级别,都会将低隔离能解决的问题解决掉):
Read UnCommited:读未提交,什么并发问题都解决不了。
Read Commited(RC):读已提交,可以解决脏读并发问题。
Repeatable Read(RR):可重复读,可以解决脏读、可重复读,在InnoDB存储引擎中,该隔离级别
就可以解决幻读。

Serializable:串行化,可以解决脏读、可重复读、幻读。它为什么可以解决所有问题,是因为它对读
和写都加锁,读写互相堵塞。这种方案是使用基于锁的并发控制去解决的。
MySQL默认的隔离级别是RR(可重复度),Oracle默认的隔离级别是RC。
注意事项:隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。

脏读幻读不可重复度:https://www.iteye.com/blog/uule-1109647

-----------------------------------------------------------------------------------------------------------------------------------

间隙锁:https://blog.csdn.net/zcl_love_wx/article/details/82382582

3.不需要关心。数据页放在缓存中。

关于事务:

事务的流程分析:

关于日志:

----------------------------------------------------------------------------------------------------------------------------------

索引:索引就是数据结构

为什么where的条件最好加索引?

索引就是一个B+ 树数据结构。主要思考的就是减少IO操作次数。
hash
数组
二叉树
多叉树(B+ 树)
B树:所有节点都会存储数据。
B+树:只有叶子节点,才会存储数据。
索引可以加快数据库的查询速度。
索引一般都是存储在磁盘中的,具体的存储方式,由存储引擎决定,比如MyISAM存储引擎,会单独使用一个
文件来存储索引数据,而InnoDB存储引擎,是将索引和表记录都存储在同一个文件中的。
其中:聚集索引、主键索引、次要索引、覆盖索引、组合索引、前缀索引、唯一索引默认都是使用B+树索引,
统称索引。

几层就是几个IO。

索引和数据一样是存在磁盘里面的。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值