开课吧mysql--------------------03

分类:全局锁表锁行锁。

表锁的总结:

读锁:共享锁。

写锁:排他锁。

select是读锁。

crud是写锁。

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

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

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

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

行锁也是两种实现的:

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

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

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

行锁的基本演示:

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

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

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

事务是事务,锁是锁,不要弄混了。

重点:

下半节课:只有在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://blog.csdn.net/zcl_love_wx/article/details/82382582

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

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

索引:索引就是数据结构

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

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

几层就是几个IO。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章