目录
1.内连接vs外连接
内连接
: join on
合并具有同一列的两个以上的表的行
,
结果集中不包含一个表与另一个表不匹配的行
外连接
: left outer join on
两个表在连接过程中除了返回满足连接条件的行以外
还返回左(或右)表中不满足条件的
行 ,这种连接称为左(或右) 外连接
。没有匹配的行时
,
结果表中相应的列为空
(NULL)
。
如果是左外连接,则连接条件中左边的表也称为
主表
,右边的表称为
从表
。
如果是右外连接,则连接条件中右边的表也称为
主表
,左边的表称为
从表
。
2.浮点数vs定点数
3.数据类型常用
如果确定是整数,就用int,如果是小数,一定用定点数类型decimal(M,D);如果是日期与时间,就用datetime。
4.视图
缺点
5.存储过程
6.存储过程优缺点
优点
缺点
7.游标
虽然我们也可以通过筛选条件
WHERE
和
HAVING
,或者是限定返回记录的关键字
LIMIT
返回一条记录,
但是,却无法在结果集中像指针一样,向前定位一条记录、向后定位一条记录,或者是
随意定位到某一
条记录
,并对记录的数据进行处理。
这个时候,就可以用到游标。游标,提供了一种灵活的操作方式,让我们能够对结果集中的每一条记录
进行定位,并对指向的记录中的数据进行操作的数据结构。
游标让
SQL
这种面向集合的语言有了面向过
程开发的能力。
在
SQL
中,游标是一种临时的数据库对象,可以指向存储在数据库表中的数据行指针。这里游标
充当了
指针的作用
,我们可以通过操作游标来对数据行进行操作。
MySQL
中游标可以在存储过程和函数中使用。
比如,我们查询了
employees
数据表中工资高于
15000
的员工都有哪些:

8.触发器
优点
1、触发器可以确保数据的完整性。
2、触发器可以帮助我们记录操作日志
3
、触发器还可以用在操作数据前,对数据进行合法性检查。
缺点
1
、触发器最大的一个问题就是可读性差。
2
、相关数据的变更,可能会导致触发器出错。
9.逻辑架构
10.sql查询流程
1.
查询缓存
:
Server
如果在查询缓存中发现了这条
SQL
语句,就会直接将结果返回给客户端;如果没有,就进入到解析器阶段。需要说明的是,因为查询缓存往往效率不高,所以在 MySQL8.0
之后就抛弃 了这个功能。
2.
解析器
:在解析器中对
SQL
语句进行语法分析、语义分析
分析器先做
“
词法分析
”
。你输入的是由多个字符串和空格组成的一条
SQL
语句,
MySQL
需要识别出里面 的字符串分别是什么,代表什么。 MySQL
从你输入的
"select"
这个关键字识别出来,这是一个查询语 句。它也要把字符串“T”
识别成
“
表名
T”
,把字符串
“ID”
识别成
“
列
ID”
。
接着,要做
“
语法分析
”
。根据词法分析的结果,语法分析器(比如:
Bison
)会根据语法规则,判断你输
入的这个
SQL
语句是否
满足
MySQL
语法
。
3.
优化器
:在优化器中会确定
SQL
语句的执行路径,比如是根据
全表检索
,还是根据
索引检索
等。
4.
执行器
:
截止到现在,还没有真正去读写真实的表,仅仅只是产出了一个执行计划。于是就进入了
执行器阶段
。

11.存储引擎
12.索引
二级索引(非聚簇索引)
不通过主键值建立的索引,通过其他列建立的索引。
B+树索引注意事项
1.根页面位置万年不懂
2.内节点中目录项记录的唯一性
3.一个页面最少存储两条记录
MyISAM引擎使用 B+Tree 作为索引结构,叶子节点的data域存放的是 数据记录的地址 。
索引的分类
从
功能逻辑
上说,索引主要有
4
种,分别是普通索引、唯一索引、主键索引、全文索引。
按照
物理实现方式
,索引可以分为
2
种:聚簇索引和非聚簇索引。
按照
作用字段个数
进行划分,分成单列索引和联合索引。
适合创建索引
不适合创建索引

索引失效案例
全值匹配我最爱(包含where所有的值)
最佳左前缀法则
主键插入顺序
计算、函数、类型转换
(
自动或手动
)
导致索引失效
范围条件右边的列索引失效


order by时不limit,索引失效
order by时顺序错误,索引失效
#过程四: order by时规则不一致,索引失效(顺序错,不索引;方向反,不索引)
#过程五:无过滤,不索引
13.锁
update自动加X锁
select有S锁和X锁
MVCC 的实现依赖于:隐藏字段、Undo Log、Read View。
undo log:多版本
read view:并发控制
binlog:
两阶段提交
14.主从复制
第
1
个作用:读写分离。
第
2
个作用就是数据备份。
第
3
个作用是具有高可用性。
4.4 如何解决一致性问题