MYSQL进阶复习

  • 以前本地的mkdown转移的csdn
    mysql进阶:
    事务:原子性 一致性 隔离性(连个事务没有关系) 持久性
    脏读:一个事务读取到另外一个还没有提交的数据
    不可重复读:一个事务先后读取数据,两次读取的数据不同
    幻读:一个事务按照条件查询数据时 没有对应的数据,插入时主键出现冲突

事务的隔离级别:在这里插入图片描述

在这里插入图片描述

存储引擎:存储引擎是基于表的,不是基于数据库的 show engines; engine = innodb;

innoDB:

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?在这里插入图片描述
MyISAM:

在这里插入图片描述

memory:

在这里插入图片描述
在这里插入图片描述

存储引擎选择

在这里插入图片描述

索引

在这里插入图片描述
在这里插入图片描述

B+tree

所有节点会出现在叶子节点 分支节点只起到索引的作用

在这里插入图片描述

聚集索引和二级索引

在这里插入图片描述
回表查询 先在二级索引中找到聚集索引 然后聚集所以再去找

索引的操作

  • 查看 show index from tb_user;

  • 创建 create index idx_user_name on tb_user(name);

  • create unique index idx_user_name on tb_user(name)

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/0551e1d44de6417081a78dfaf44938fd.png#pic_center

sql性能分析

  • 查看频次 show global status like ‘Com_______’ 7个下划线

慢查询日志

show variables like ‘slow_query_log’

  • select @@have_profiling;
  • show profiles; 查看sql耗时情况

在这里插入图片描述

explain

在这里插入图片描述
type: system 查询了系统表 const 使用了唯一索引 ref 使用了索引但不是非唯一索引 index使用了索引但是对索引进行了扫描 all 全表扫描
在这里插入图片描述

索引使用原则

  • 最左前缀法则 索引的生效条件 和位置没有关系 就是字段必须存在
  • 再联合查询中 如果出现范围><,索引就是会失效 (>=,<=就是可以索引成功)
  • 尽量不要在索引列上做运算操作,索引将失效

在这里插入图片描述

  • 字符串查询不加单引号 索引失效

  • 模糊查询

在这里插入图片描述

  • 前后都加也是失效的
  • or连接的条件

在这里插入图片描述

  • mysql的智能

在这里插入图片描述

  • SQL提示 告诉数据库使用哪个索引 不用哪个索引
    在这里插入图片描述

  • 覆盖索引

  • 在这里插入图片描述

  • extra

    • using index condition 查找使用了索引,但是需要回表查询数据
    • null 也是要回表查询
    • using where,using index 使用了索引,但是需要的数据都在索引列中能找到,不需要回表
  • 前缀索引

    • 在这里插入图片描述
  • 索引的设计原则

    • 1 命名规范

      普通索引:idx_字段名

      唯一索引:ux_字段名

插入数据的优化

  • 批量插入

    • 使用load指令插入
    • 在这里插入图片描述
  • 手动事务提交

  • 主键顺序插入

主键优化

表空间 段 区 页 行

  • 在这里插入图片描述
  • 在这里插入图片描述

orderby优化

  • 在这里插入图片描述

  • backword index 反向扫描索引

  • 我们创建的索引是升序的结构 也需要遵循最左前缀法则

  • 在这里插入图片描述

  • 只有实现覆盖索引 创建的索引才有意义要不然还是要回表查询(注意)

  • 在这里插入图片描述

group by 优化

  • using index 没问题
  • using temporary 使用临时表 有问题 需要优化

limit 优化

  • 通过覆盖索引加子查询来进行优化
  • 在这里插入图片描述

count优化

  • count 不计数null

在这里插入图片描述

update优化

  • 在update的时候条件需要是索引
    在这里插入图片描述

视图

  • with check option
    在这里插入图片描述

  • 在view的基础上创建view 然后再创建view 然后再操作 就是级联去检查

  • 在这里插入图片描述
    在这里插入图片描述

  • 视图的更新条件 视图中的数据要和实体数据表中的数据是一对的关系

在这里插入图片描述

存储过程

create procedure p1()
begin

end;
call p1();
-- 查看
select *from information_schema.ROUTINES where ROUTINE_SCHEMA ='itcast'
show create procedure p1;
drop procedure if exists p1;

在命令行中可能有问题 那是结束的原因 使用 delimiter $$ 来改变结束符

在这里插入图片描述

mysql存储过程语法
- 变量(系统变量,会话变量)默认是session级别的
- 查看系统变量 show [session|global] variables; 查看所有的系统变量
- show global variables like 'auto%'; 模糊匹配
- 准确查看某个系统变量的值 select @@global.autocommit  
- 设置系统变量
- set session autocommit= 0;
- set session
用户定义变量
- set @var_name = 'sunchenchao'
- 查看 select @var_name,@var_name2;
- 没有赋值直接拿 拿到的就是null
局部变量
- 就是在begin 和 end 范围之内
- 定义局部变量 declare stu_count int defautl 0;
- 赋值 select count(*) into stu_count from student;
- select stu_count;
if的语法
if  score>=85 then
	set resutl = '优秀';
else if scoure >60
	set resutl ='合格’;
else
	set resutl = 'buhege';
end if;
-
存储过程的参数
- in类型 作为输入
- out 作为输入出
- inout 即可以作为输出也可以作为输入
create procedure p2(in socre int, out resutl varchar(20))
begin
	set resutl =20;
end;
call p2(68,@result);//@resutl 用户定义的变量
select @resutl;
-
Case
case case_value
	when when_v then 执行
	when when_b then 执行
end case;	
-
where
where 条件 do
	逻辑
end where;
-
repeat 

在这里插入图片描述

  • loop
  • 在这里插入图片描述

游标

  • 游标的写发
  • 退出条件
  • 存储函数

在这里插入图片描述

触发器

在这里插入图片描述
在这里插入图片描述

  • old 和 new 是自带的参数 old是原来的参数 new 是最新的参数 concat 字符串的拼接

全局锁
  • 使用情况就是对数据库做备份就是使用这个锁

  • 加全局锁 flush table with read lock;

  • 文件备份 mysqldump -uroot -p1232 db01 > D:/dv01.sql

  • mysqldump --single-transaction -uroot -p1232 db01 > D:/dv01.sql 不加锁的数据一致性备份

表级锁
  • 表锁

    • 共享读锁
      • 加了读锁只能读 只有释放了可以更新 其他客户端也只能读
    • 表独占锁
      • 自己家了写锁 可读可写 其他客户端不可读不可写
    • lock tables 表名 read/write
    • unlock tables
  • 元数据锁

    • 是系统自动控制的 就是对表结构的控制 如果有事务的时候是不允许修改的

    • 在这里插入图片描述

    • 修改表结构是exclusive的锁 与其他所有的锁都是互斥的

  • 意向锁(主要是处理行锁和表锁之间的关系 先加上了行锁后要加表锁 就不用一行一行的去查看表中是否有行锁 直接就是会阻塞)

  • lock in share mode

    • 在这里插入图片描述

    • 在这里插入图片描述

    • 在这里插入图片描述

  • 行级锁

    • 在这里插入图片描述
    • 行锁
      • 共享锁:允许事务去读一行,组织其他事务获得相同数据集的排他锁

      • 排他锁

      • 在这里插入图片描述

      • 在这里插入图片描述

      • lock_model : s共享锁 res_not_gap 没有间隙锁 x是排他锁

      • 在这里插入图片描述

      • 间隙锁

      • select * from performace_schema.data_locks; 就是查看锁的情况 Gap就是间隙锁 lockdata为8 就是到上一条记录之间的中间

      • 在这里插入图片描述

      • 间隙锁和行锁称为临建锁 左开右闭

间隙锁:锁住两个数据之间的数据,

临键锁:行锁+间隙锁

间隙锁和临间锁在RR隔离级别下解决幻读

唯一索引的等值查询,给不存在的一行记录加锁时,会优化为间隙锁

普通索引的等值查询,向右遍历时,第一个不满足查询需求时,临键锁退化为间隙锁 2,5, 8,11,当给8加锁时,由于普通索引能有多个,所以8的前后都有可能出现8,这是会给8加行锁,5-8,8-11加间隙锁;

唯一索引的范围查询,>=5,会给5加行锁,(5,8]临键锁,(8,11]临键锁,(11,∞)

innoDB

在这里插入图片描述
在这里插入图片描述

架构

在这里插入图片描述

内存结构

在这里插入图片描述

  • changeBuffer

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

磁盘结构
  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

后台线程
  • 在这里插入图片描述
  • aio 异步io show engine inondb status;
事务的原理
  • 在这里插入图片描述

  • 在这里插入图片描述

    redo.log
    • 重做日志
    • 在这里插入图片描述
undo.log
  • 回滚日志
  • 在这里插入图片描述

MVCC

  • 当前读 就是读取到最新的数据 会无视事务
  • 快照读 简单的select 不加锁就是快照读
  • 在这里插入图片描述
隐藏字段
  • 在这里插入图片描述

  • DB_REX_ID 最近修改事务ID

undolog
  • 在这里插入图片描述

  • undolog 版本链

  • 在这里插入图片描述

    readview

    在这里插入图片描述
    在这里插入图片描述

数据库系统管理

  • 系统表的各种作用 data_lock 数据库表的锁
  • 在这里插入图片描述

mysql 常用工具

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

运维篇

错误日志
  • show variables like ‘%log_error%’
二进制日志
  • show variables like ‘%log_bin%’

  • 在这里插入图片描述

  • -statement

  • row 基于行的

  • binlog_format = statement 在php.ini文件中去修改这样可以改变二进制文件的方式

  • 在这里插入图片描述

  • mysqlbinlog -v logfilename

  • mysqlbinlog --set-charset=utf-8 /var/lib/mysql/mysql-bin.000001>backuptmp.sql
    
  • mysqlbinlog -v /var/lib/mysql/mysql-bin.000001 --start-position=219 --stop-position=982 | mysql -uroot -p123456
    
  • 清理二进制文件

    • 在这里插入图片描述

    • 也可以配置ini文件的binlog过期时间

查询日志
  • show variables like ‘%general%’
  • ini文件
  • set golbal general_log = on
慢查询日志
  • slow_query 慢查询日志
  • 在这里插入图片描述
主从复制
  • 在这里插入图片描述

  • 主库的配置

  • 在这里插入图片描述

  • systemctl stop firewalld

  • systemctl disable firewalld

  • 在这里插入图片描述

  • systemctl restart

  • 在这里插入图片描述

  • 从库的配置

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

  • Replica_IO_RUNNING

  • REPLICA_SQL_RUNNING 只要这两个是ok的就是主从复制没有什么问题

  • 需要把初始数据操作一份 然后在开启主从复制 这样才可以达到一致

分库分表

  • 在这里插入图片描述

  • 在这里插入图片描述

  • 在这里插入图片描述

mycat
  • mycat 就懶得搞了 图片一个一个从本地的mkdown弄下来真的麻烦

  • http://dl.mycat.org.cn/ 下载

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 实际问题的解决

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 表结构一样 里面内容不一样 就是水平分表

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 在mycat下 conf目录下

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 启动服务

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • rule.xml 分片规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值