总结
1.SELECT语句子句
- 子句的书写顺序:where -> group by -> having -> order by -> limit ;
(1)where子句
-
指明过滤条件;
-
between
较小的数and
较大的数; -
in
(较小的数,较大的数); -
is null
或is not null
; -
like模糊匹配;
(2)group by 子句
-
根据指定的查询条件将查询结构进行分组,用于做聚合运算;
-
聚合函数:
avg( )
、max( )
、min( )
、count( )
、sum( )
;
(3)having子句
- 将分组之后的结果再次过滤;
(4)order by子句
- 根据指定的字段对查询结果进行排序,默认为升序,降序使用关键字desc;
(5)limit 子句
- 对查询的结果进行输出行数的限制 ;
2.键的概念
-
键:数据库中的键(key)又称为关键字,是关系模型中的一个重要概念,它是逻辑结构,不是数据库的物理部分;
-
唯一键:即一个或者一组列,其中没有重复的记录,可以唯一标示一条记录;
-
主键:属于唯一键,是一个比较特殊的唯一键,区别在于主键不可为空;
-
外键:一张表外键的值一般来说是另一张表主键的值,因此,外键的存在使得表与表之间可以联系起来;
3.索引的概念
-
索引就像是一张表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据,保存索引数据的文件一般会与保存数据的目录分开;
-
索引应该构建在经常被用作查询条件的字段上;
4.索引类型
-
普通索引:加速查询;
-
唯一索引:加速查询 + 列值唯一(可以有null);
-
主键索引:加速查询 + 列值唯一 + 表中只有一个(不可以有null);
-
组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并;
-
全文索引:对文本的内容进行分词,进行搜索;
-
空间索引:指依据空间对象的位置和形状或空间对象之间的某种空间关系按一定的顺序排列的一种数据结构;
5.Innodb 存储引擎
-
所有的InnoDB表的数据和索引存储于同一个表文件中,但是表数据和表结构分离;
-
Mariadb默认的存储引擎是XtraDB,但是为了与MySQL兼容,因此也取名做InnoDB,因为MySQL的默认存储引擎是InnoDB;
-
使用聚集索引(数据和索引在一起),也支持自适应hash索引,锁粒度为行级别,支持支持热备工具;
-
支持事务的存储引擎,适合处理大量的短期事务;
6.MyISAM 存储引擎
-
所有的MyISAM表的数据和索引存放在不同的文件中,表结构也分离;
-
支持全文索引(fulltext index),压缩,空间函数;
-
不支持事物,表级锁,适用于只读,读多写少;
7.MySQL的并发访问控制
-
任何的数据集只要支持并发访问模型就必须基于锁机制进行访问控制;
-
读锁:共享锁,允许给其他人读,不允许他人写;
-
写锁:独占锁, 不允许其他人读和写;
-
显示锁:用户手动请求读锁或写锁;
-
隐式锁:由存储引擎自行根据需要加的,无需我们管理;
8.MySQL事务机制
- 一组原子性的SQL查询,或多个SQL语句组成了一个独立的单元,要么这一组SQL语句全部执行,要么全部不执行;
ACID机制:
-
automicity
:原子性,整个事物中的所有操作要么全部成功提交,要么全部失败回滚; -
consistency
:一致性,数据库总是从一个一致性状态转化为另一个一致性状态; -
isolation
: 隔离性,事物不会相互影响,一个事物所作出的操作在提交之前,是不能为其他事物所见,隔离有多种级别,主要是为了并发; -
durability
:持久性,事物一旦提交,其所作的修改会保存在数据库中,不能丢失;
9.MySQL 查询缓存机制
-
缓存的是查询语句的整个查询结果,是一个完整的select语句的缓存结果;
-
哪些查询可能不会被缓存 :查询中包含UDF、存储函数、用户自定义变量、临时表、mysql库中系统表、或者包含列级别的权限表、有着不确定值的函数;
10.MySQL 日志分类
-
查询日志 :query log ,一般不启用;
-
慢查询日志:slow_query_log ,用于对执行速率较慢的SQL语句就像过滤,有利于SQL代码的优化;
-
错误日志:error log ,必须启用;
-
二进制日志:binary log,用于通过'重新执行'日志文件中的记录的事件(SQL语句)来生成数据副本,也就是用于主从复制;
-
中继日志:relay log ,在主从复制架构中,从服务器用于保存从主服务器的二进制日志中读取到的时间;
-
事务日志:transaction log ,事物日志由事物型存储引擎自行管理和使用,无需手动管理;
11.MySQL 备份策略的注意点
-
可容忍丢失多少数据;
-
恢复需要在多长时间内;
-
备份的对象: 数据、二进制日志和InnoDB的事务日志、SQL代码(存储过程和存储函数、触发器、事件调度器等)、服务器配置文件;
12.备份策略需要考虑的因素
-
持锁的时长;
-
备份过程时长;
-
备份负载;
-
恢复过程时长;
13.MySQL 半同步复制模型
- 所谓的半同步复制指的是一台主节点有多个从节点,在众多的从节点之中有一个从节点在收到主节点的二进制日志信息之后,存储在中继日志中,执行中继日志后,给主节点一个反馈信息,直接点收到这个反馈信息之后,返回给执行这句SQL的ORM语句,表示数据已经存储完毕;