2022/3/20

数据库

SQL优化

insert优化

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

主键优化

在这里插入图片描述

order by优化

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

group by优化

在这里插入图片描述

limit优化

在这里插入图片描述

count优化

在这里插入图片描述

update优化

在这里插入图片描述

视图

介绍和基本语法

在这里插入图片描述

在这里插入图片描述

cascaded选项

在这里插入图片描述
cascaded选项:级联,当使用此选项后,插入数据时不仅会检查当前的条件,还会检查其依赖的视图的条件
如:在v3中插入id为17的值,添加成功,因为v3没有检查选项,所以不会判断<=15的条件,而到v2有cascaded检查选项,判断>=10成功,并向上到v1判断<=20成功,从而插入原表,但v3视图中并不会显示id为17的值。
在这里插入图片描述

local选项

在这里插入图片描述
local选项:当对视图插入数据时,会递归向上检查。当某个视图有local选项,则判断当前视图的条件,成功后,继续向上递归检查。若有check选项则检查条件,没有则不坚持条件


cascaded和local的不同:

  • 当某一个视图使用cascaded选项,则此视图依赖的视图都会进行条件判断。
  • 当某视图使用local选项,则此视图会进行条件判断,通过后,检查其依赖的视图是否有check选项,有则检查,没有则不坚持。

更新和作用

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

存储过程

介绍

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

基本语法

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

系统变量

在这里插入图片描述

用户自定义变量

在这里插入图片描述

局部变量

在这里插入图片描述

if

在这里插入图片描述

参数传递

在这里插入图片描述

case

在这里插入图片描述

while

在这里插入图片描述

repeat

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

loop

在这里插入图片描述
在这里插入图片描述
计算100以内偶数和

游标

在这里插入图片描述
在这里插入图片描述
注:此处不懂再看p114
变量需定义在游标前!

存储函数

在这里插入图片描述

触发器

介绍

在这里插入图片描述
关于行级触发器和语句级触发器:若一条update语句更新5条数据的信息,行级触发器会触发5次,语句级触发器则会触发1次

语法

在这里插入图片描述

示例

  • 定义日志表
    在这里插入图片描述

  • 插入数据触发器
    在这里插入图片描述
    插入数据后的日志表: 在这里插入图片描述

  • 修改数据触发器
    在这里插入图片描述
    更新后的触发器表:
    在这里插入图片描述
    更新多行数据时,由于是行级触发器,会多次触发
    在这里插入图片描述
    在这里插入图片描述

  • 删除数据触发器
    在这里插入图片描述
    删除数据后的日志表:
    在这里插入图片描述

介绍

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

全局锁

在这里插入图片描述
如上图所示过程,在备份tb_stock后,有数据更改,而对tb_order和tb_orderlog的更改均在备份前,导致数据库备份中的tb_stock表的数据与实际的数据库,以及其余表中的数据不一致。
加锁后:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

表级锁

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

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

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


    元数据锁(MDL)
    在这里插入图片描述
    在这里插入图片描述


    意向锁
    在这里插入图片描述
    当行锁和表锁冲突时,表锁会扫描整个表,查看是否有行锁存在,效率极低。
    在这里插入图片描述
    当表中有意向锁时,再加锁则会检查此锁和已有的意向锁是否兼容,不兼容则该加锁操作会阻塞。
    在这里插入图片描述
    在这里插入图片描述

行级锁

在这里插入图片描述
行锁
在这里插入图片描述
间隙锁
在这里插入图片描述
临键锁
在这里插入图片描述

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

  • 间隙锁\临键锁

在这里插入图片描述

InnoDB引擎

逻辑结构

在这里插入图片描述

架构

在这里插入图片描述

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

事务原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在未引入redo log时,如果内存中的数据往磁盘中刷新时出错,则破坏了事务的持久性。
在这里插入图片描述

引入redo log后,缓冲区中更改的文件会先进入redolog缓冲区,并定期刷入磁盘。若缓冲区向磁盘刷新文件时出错,可通过redo log对文件进行恢复。此外,redolog buffer写入磁盘时,写入的是日志文件,为顺序存取,效率高于直接从buffer pool写入磁盘时所用的随机存取。
在这里插入图片描述

MVCC

在这里插入图片描述

  • 隐藏字段

在这里插入图片描述

  • undo log
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    而查询时返回的版本,有readview决定。
  • readview
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    对此句查询语句的快照读分析如下(READ COMMITTED条件下):
  • 首先看id为30记录的undo log链头中的DB_TRX_ID,即为需要比较的trx_id=4.
    • 首先判断trx_id==creator_trx_id,4 == 5不成立
    • 判断条件trx_id<min_trx_id,4<3不成立
    • 判断条件trx_id>max_trx_id,4>6不成立
    • 判断条件min_trx_id<=trx_id<=max_trx_id,如果trx_id不在此范围则可访问,4∈[3,4,5],所以不可访问
  • 以上知DB_TRX_ID=4的记录不会被此条语句读出。判断下个元素的DB_TRX_ID,即DB_TRX_ID=3
  • DB_TRX_ID=3依旧不满足上述条件,判断DB_TRX_ID=2,此记录在条件trx_id<min_trx_id成立,所以会查出此版本的记录。



    REPEATABLE READ条件
    在这里插入图片描述
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值