MySQL体系结构和存储引擎【InnoDB特性】【4种隔离级别】【聚集索引】

1.概念

1.1 数据库

文件的集合

1.2 数据库实例

程序

1.3 数据库 & 数据库实例的关系

应用程序通过数据库实例和数据库打交道

2.InnoDB存储引擎

2.1 特性

2.1.1 支持事务

2.1.2 具有行锁设计

默认的读取操作不会产生锁

2.1.3 支持外键

2.1.4 通过多版本并发(MVCC)来获得高并发

实现了4种隔离级别

隔离级别特点能够解决的问题
Read uncommitted(读未提交)一个事务能够读到其他事务没有提交的数据,也称为脏读
Read committed(读已提交)一个事务只能读到其他事务已经提交的数据,能够解决脏读。但是在一个事务A中,如果其他事务修改了事务A刚刚读取的数据,事务A再次读取数据会发生变化,也称为不可重复读脏读
Repeatable read(可重复读)使用了MVCC多版本控制(类似乐观锁)实现了重复读:InnoDB给每一行数据加一个版本号信息,当一个事务修改一个数据时会增加它的版本号+1,当一个事务开始的时候会缓存下此时的版本号,后面读取的时候只会读取这个版本号的数据。即使别的事务提交了数据,修改后的数据版本号大于最开始缓存的版本号,因此修改后的数据不会被读到。但是解决不了幻读:在事务A操作一个数据集合期间,其他事务插入或删除了该数据集合,导致事务A最终操作数据集合时的记录数量多了或者少了重复读、脏读
Serializable 序列化通过加锁防止并发: 对于Select语句,会要求持有共享锁(读锁);对于更新语句(Insert/Delete/Update),会要求持有互斥锁(写锁)幻读、重复读、脏读

3.聚集索引

3.1 聚集索引(主键索引)

聚集索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的记录数据

3.2 辅助索引(二级索引、非主键索引)

叶子节点=键值+书签。Innodb存储引擎的书签就是相应行数据的主键索引值

3.3 覆盖索引

如果一个索引(通常是非主键组合索引)包含了在查询里的Select、Join和Where子句用到的所有字段,这个索引就叫做覆盖索引。此时,select的数据列只用从索引中就能够取得,不必从数据表中读取。

当发起一个被索引覆盖的查询(也叫作索引覆盖查询)时,在EXPLAIN的Extra列可以看到“Using index”的信息

4.连接MySQL

连接MySQL的操作是一个连接进程,也是这个进程和数据库实例进行通信(进程间通信)

与MySQL实例的进程间连接方式有:

  • TCP/IP:最常用的方式。终端输入命令 mysql -hhost -ppassword -uroot 即可建立连接

  • 命名管道

  • 共享内存

  • UNIX域套接字

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值