关于MySQL的介绍,我就不啰嗦了,直接从sql语句开始,介绍相关概念。
从写sql语句到按下回车,经历了什么?
- SQL由API接收请求
- SQL解析器解析请求(判断语法等问题)
- SQL优化器(制定执行计划)
- 执行计划,从缓冲区查询(若有,通过API返回给用户,否则从磁盘(存储引擎)中读取)
- 日志记录行为。
接下来说说存储引擎
存储引擎就是对底层数据的一种读写操作的封装,可以用show engines 这个语句查看存储引擎,这里主要说MyISAM 、InnoDB、MEMORY、ARCHIVE这四个存储引擎。对其中的一些名词在后面解释。
-
MyISAM,这个存储引擎支持全文索引,不支持外键,以B+树这种结构建立索引,支持表锁,不支持事务。特点是对于在线分析处理操作速度较快.
-
InnoDB,这个存储引擎不支持全文索引,支持外键,以B+树建立索引,支持行锁,支持事务,索引属于聚集索引。
-
MEMORY,这个存储引擎将数据存储于内存中,默认哈希索引,会把varchar当成char类型处理,缺点是,数据不安全,比如突然断电,内存中的数据直接丢失。不支持text字段,BLOB字段。处理数据方式:从磁盘中提取字段,如果这几个字段中由text、BLOB类型,那么交给MyISAM处理,这样就会导致部分数据在磁盘,部分数据在内存中,处理的效率还不如MyISAM。
-
ARCHIVE,压缩存储引擎(也叫归档存储引擎),默认1:10压缩,只支持插入和查询操作,不支持删除和修改操作。适用于数据量大,查询少的数据(比如日志数据)。
名词解释
全文索引:一种特殊类型的索引,查找文本中的关键词,而非比较索引值。MySQL5.6以后MyISAM和InnoDB支持。只有字段的数据类型为char、carchar、text才能建立全文索引。
主键:唯一标识表中每行的这个列称为主键(不允许重复)。并不是必须的,但是没有主键不便于数据库的管理。
外键:一张表中有一个非主键的字段指向了别一张表中的主键,就将该字段叫做外键。
B+树:一种多路树,这里不过多介绍。
行锁:防止多个进程对同一张表中的同一行进行读写操作。(允许同时读)
表锁:防止多个进程对同一张表进行读写操作。(允许同时读)
事务:一组sql语句的集合
MySQL中的数据类型:常用的有int(四字节),float(单精度浮点4),double(双精度浮点8),时间类型date,time,字符串类型char(定长字符串),varchar(变长字符串)、blob(二级制的长文本数据)、text(长文本数据)。
事务的特性:原子性、一致性、隔离性、持久性。
- 原子性:事务执行过程中,不能中断(要么成功、要么失败)
- 一致性:保证操作前后的主键不能重复
- 隔离性:消除事务间的互相影响
- 持久性:保证事务执行的结果在磁盘上永久储存
锁:并发处理保证完整性
索引:数据结构(基于字段建立),提高查询效率
- MyISAM:B+树(将数据的地址存放于叶子结点),将数据和索引分开存储。myd存放数据,myi存放索引。
- InnoDNB:B+树(叶子结点直接存放数据),将数据和索引存放到一起,属于聚集索引,一定要有索引,若创建时没有给出索引,系统会创建索引。
系统创建索引规则:
有主键:按照主键建立索引,该索引为主索引
没有主键,有唯一键,按照唯一键建立索引,该索引为主索引
既没有主键,也没有唯一键,添加隐藏字段,6字节,并以该字段建立索引,该索引为主索引。