
【SpringBoot篇】Mysql高级配置
Mysql配置
查看mysql使用的字符集
1 | show variables like '%char%'; |
SQL_MODE
是mysql的系统变量,定义了对于sql语句的语法、数据校验和处理方式的严格程度。
查看默认设置的sql mode值
1 | show variables like 'sql_mode'; |
ONLY_FULL_GROUP _BY :
更改sql_mode
临时设置
永久设置
找到my.cn配置文件
设置ONLY_FULL_GROUP _BY

分组时 select后必须跟 聚合函数(max,min,avg),分组字段 name不能出现在select后边 因为sql_mode 设置ONLY_FULL_GROUP _BY
去掉only_full_group_by 错误显示,name值不对
MYSQL逻辑架构

jdbc六个步骤
注册驱动
获取连接
创建语句
执行语句
获取数据结果集处理
关闭驱动
存储引擎
InnoDB mysql默认存储引擎
支持事务,行级锁定,外键约束,支持崩溃恢复
开启事务在commit提交后数据才保存
start transaction; 开启事务
查看表结构
show create table 表名
外键约束
ON DELETE RESTRICT 主表有数据不让更新
ON UPDATE CASCAADE 主表改了子表也更改 在子表中设置外键
MyISAM
不支持事务
表级锁定,更安全效率太低
较低的存储空间,比较适合存储大量非事务数据
Memory
数据存储在内存里
不支持持久化
表级锁定
Mysql索引
常见索引结构 进行高效的数据查询 树的结构

索引在更新数据表时也需要变动,降低表的更新速度
在大量数据的检索,进行数据的索引
常见的索引结构:
B树 多路搜索树 索引有序
Hash索引 映射hash码 不支持范围查询和排序
R树 多维数据的索引结构 地理位置信息学习通GIS
B+树 聚合索引 复合索引 唯一索引

BST树 二叉搜索树 问题瘸腿问题
AVL树 平衡二叉搜索树 多叉树提高效率
层级关系不能超过1
B-tree 多路平衡搜索树
B+tree 查找效率更稳定
Mysql索引类型
聚簇索引 侄搜索条件 主键值 只能用于InnoDB B+tree

非聚簇索引: 二级索引,辅助索引 回表查询
叶子节点:主键和索引列
聚簇索引
叶子节点:整条数据
以时间换空间,以空间换时间
为什么非聚簇需要回表查询,不回表行不行?
如果存在多个二级索引,每个二级索引树的叶子节点都存储完整数据,占用太多存储空间
虽然回表二次查询,利用B+tree进行查找,速度并没有慢太多
联合索引 同时多个列建立索引 c2索引相同,进行c3索引
覆盖索引
MyISAM 索引结构(了解)
非聚簇索引
MyIsam和InnoDB对比
CREATE INDEX 索引名 on 表(字段)
索引失效
计算函数导致失效
函数和%or_号 模糊匹配开头导致失效
不等于<> != 导致索引失效
IS NOT NULL 导致索引失效
类型转换导致索引失效
全索引匹配效率最高
违反最佳左前缀法则
范围查询导致失效
Mysql关联查询优化
自动选择驱动表的原则,往表大的上建立索引




