1. 安装 MySql 后的一些问题
1.1 字符乱码问题
- 在 MySql 配置文件加入字符编码
character_set_server=utf8
- 重启 MySql 服务器
- 修改已存在的数据库的字符集
alter database 数据库名 character set 'utf8';
- 修改数据表的字符集
alter table 表名 convert to character set 'utf8';
1.2 权限修改
- 查看权限(\G : 按列显示)
select * from user\G;
- 授权(所有库、所有表的全部权限)并设密码
grant all privileges on *.* to root@'%' identified by '123456';
1.3 修改密码
- 修改某个用户的密码
update mysql.user set password=password('123456') where user='root';
- 修改完后一定要刷新
flush privileges;
1.4 查看 sql_mode
show variables like 'sql_mode';
2. 逻辑架构
2.1 底层原理(执行流程)
- 进入数据库
- 访问数据库连接池
- 访问 “缓存和缓冲”,若在缓存中命中,则直接返回,不继续访问
- 若 第3步 未命中,则访问接口
- 访问解析器
- 访问优化器(在不改变查询结果的情况下调整 sql 的顺序),在此处生成执行计划。
- 存储引擎按照执行计划,打开表、查询数据、返回结果
- 流程图
2.2 查看执行周期(通过代码查看上述流程)
- 修改配置文件开启查询缓存
query_cache_type=1;
- 重启 MySQL
- 开启 profiling
show variables like '%profiling%';
set profiling=1;
- 查询数据
select * from mytb where id=2;
- 查看查询缓存
show profiles;
- 查看具体的缓存信息(query 后的值 对应上表的 id)
show profile cpu.block io for query 2;
- 注意
只有 sql 语句一模一样才会命中缓存。
2.3 Performance Schema 性能架构
- 官方文档 :https://dev.mysql.com/doc/refman/8.0/en/performance-schema.html
- 在官方文档的 SHOW PROFILE Statement 部分,有这样一句话
- SHOW PROFILE 在 8.0 及之前版本还都可以用。
- 查看 Performance Schema
打开 MySQL 查看所有的数据库
show databases;
会发现有这样一个数据库
这里面就是该性能架构的相关文件
2.4 sql 语句执行顺序
- 手写时
- 机读后
- 这就是优化器的作用
3. 存储引擎
3.1 查询命令
show engines;
3.2 MyISAM 和 InnoDB (实际应用)
- 前四点最重要
3.3 其他引擎的介绍
- Archive 引擎(档案引擎)
只支持 insert 和 select 操作 - Blackhole 引擎(黑洞引擎)
不会执行任何查询操作,只会把查询语句存储到日志中 - CSV 引擎
可以将普通的 CSV 文件作为 Mysql 的表来处理,但不支持索引
可以作为一种数据交换的机制(报表系统、文本编辑) - Memory 引擎
快速的访问数据库 - Federated 引擎(联合引擎)
若 表A 和 表B 在不同主机上,不能关联查询时,可在 表A 所在主机上 新建一个与 表B 一模一样的表,但只存放 访问 表B 的访问地址、用户名、密码等信息,这就是联合引擎
只支持简单的两表查询,不支持更多表连接和排序、分组 等的操作
补充:若要实现多表查询、分析,需要使用 数据中心 ,即定时的把 表A 表B 的数据读入数据中心,在数据中心里分析