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域套接字