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

image-20240813164355795

分组时 select后必须跟 聚合函数(max,min,avg),分组字段 name不能出现在select后边 因为sql_mode 设置ONLY_FULL_GROUP _BY

去掉only_full_group_by 错误显示,name值不对

MYSQL逻辑架构

image-20240813171118832

jdbc六个步骤

注册驱动

获取连接

创建语句

执行语句

获取数据结果集处理

关闭驱动

存储引擎

InnoDB mysql默认存储引擎

支持事务,行级锁定,外键约束,支持崩溃恢复

开启事务在commit提交后数据才保存

start transaction; 开启事务

查看表结构

show create table 表名

外键约束

ON DELETE RESTRICT 主表有数据不让更新

ON UPDATE CASCAADE 主表改了子表也更改 在子表中设置外键

MyISAM

不支持事务

表级锁定,更安全效率太低

较低的存储空间,比较适合存储大量非事务数据

Memory

数据存储在内存里

不支持持久化

表级锁定

Mysql索引

常见索引结构 进行高效的数据查询 树的结构

image-20240815090839166

索引在更新数据表时也需要变动,降低表的更新速度

在大量数据的检索,进行数据的索引

常见的索引结构:

B树 多路搜索树 索引有序

Hash索引 映射hash码 不支持范围查询和排序

R树 多维数据的索引结构 地理位置信息学习通GIS

B+树 聚合索引 复合索引 唯一索引

image-20240815092402274

BST树 二叉搜索树 问题瘸腿问题

AVL树 平衡二叉搜索树 多叉树提高效率

层级关系不能超过1

B-tree 多路平衡搜索树

B+tree 查找效率更稳定

Mysql索引类型

聚簇索引 侄搜索条件 主键值 只能用于InnoDB B+tree

image-20240815153140574

非聚簇索引: 二级索引,辅助索引 回表查询

叶子节点:主键和索引列

聚簇索引

叶子节点:整条数据

以时间换空间,以空间换时间

为什么非聚簇需要回表查询,不回表行不行?

如果存在多个二级索引,每个二级索引树的叶子节点都存储完整数据,占用太多存储空间

虽然回表二次查询,利用B+tree进行查找,速度并没有慢太多

联合索引 同时多个列建立索引 c2索引相同,进行c3索引

覆盖索引

MyISAM 索引结构(了解)

非聚簇索引

MyIsam和InnoDB对比

CREATE INDEX 索引名 on 表(字段)

索引失效

  1. 计算函数导致失效

    函数和%or_号 模糊匹配开头导致失效

  2. 不等于<> != 导致索引失效

  3. IS NOT NULL 导致索引失效

  4. 类型转换导致索引失效

  5. 全索引匹配效率最高

  6. 违反最佳左前缀法则

  7. 范围查询导致失效

Mysql关联查询优化

自动选择驱动表的原则,往表大的上建立索引