当前位置: 首页 > news >正文

MySQL学习笔记

MySQL关系型数据库,其中的实体,每个实体的可以有多个属性,属性不许在分,用于区分不同实体的属性是Key,属性有一定约束。

每一张数据表表示一种实体

数据库规范

视图

本质就是查询的结果,但是只是虚表,不是真正存在的数据,只是通过视图显示,但是也可以通过视图进行修改。

例如

索引

当数据量大时一条条查询数据就慢,但是可以通过建立索引来提升查询速度

索引方式有二叉树和Hash,有多种索引类型

触发器

在某些特定条件,例如执行某个语句时,会自动执行相关的操作,一般用来判断合法性和安全性,相对更加灵活,此时可以从新旧表中对以及变化的数据进行操作。

举例将删除的信息的外键去除。

事务

MySQL使用的数据引擎中只有InnoDB允许事务,也就是对数据操作的原子性

存储引擎

索引进阶

索引相当于一本书的目录,用来快速找到数据。

单列索引,只针对一列数据建立索引。

除全文外,其余索引都是直接使用

全文索引是用来匹配文章中的单词用例如下,其中单词长度大于4,body是建立索引的位置

组合索引

将多个列组合绑定成为一个索引,此时这个索引相当与上文的单列索引。

索引速度

Uni>Noraml,如果是组合索引但是使用单个条件查询,此时在前的数据速度快。在后的速度慢,因为只有在前的正常能走索引,但如果联合使用,速度又和等效的单列索引一样快。

索引底层原理

使用索引的原因是MySQL采用磁盘存储,每一次磁盘IO要消耗大量时间,因此使用索引减少检索次数也就减少检索时间,虽然会增加复杂度

索引底层实现是Hash和B-tree,Hash实现能达到O(1)的时间复杂度,

但是有以下三个问题

如果使用B-Tree,虽然会损失一点速度,但是能够解决上述的这些问题

查找举例(类似二叉搜索数)

但是由于Btree中的节点内容是整条记录,这样读取时间就会比较久,因此改进引入B+Tree

非叶子节点不保存整条记录,运用的思想类似BTree

这样读取IO时间少且相对固定(都需走到叶子节点才能得到数据),MySQL默认使用B+📕

MyISAM引擎实现B+树

InnoDB实现

对于InnoDB,数据本身就是索引的一部分,且一定要存在主键,否则也会自己寻找代替,因为其余索引存的值是对应记录的主键

锁机制 

事务的隔离级别机制

MySQL默认是RR,但是一定程度上解决了幻读问题

分为读锁和写锁

从作用域考虑:全局锁,表锁,行锁(只有InnoDB支持)

但是如果没有走索引(如没有使用主键),行锁有可能升级为表锁,因为无法精确找到具体应该修改的位置,如果对条件加上索引,让它精确就不会发生上述问题。

行锁还可以继续下分

单一索引精准匹配时记录锁,索引存在但没有实际记录间隙锁 ,索引存在多数据存在才是临建锁

间隙锁解决幻读问题的原理是,锁住的是没插入数据的空间,防止其插入数据

相关文章:

  • LSTA: Long Short-Term Attention for Egocentric Action Recognition
  • 【人工智能】【Python】在Scikit-Learn中使用决策树算法(ID3和CART)
  • manim安装
  • 不同路径——1
  • LeetCodeHot100_0x07
  • 2025高频面试算法总结篇【递归回溯动态规划】
  • LabVIEW 线性拟合
  • Python核心语法-数据基本运算(一)
  • 笔记:代码随想录算法训练营day46:LeetCode647. 回文子串\516.最长回文子序列
  • JVM---Java 类生命周期与类加载机制
  • 高版本node(17+)环境下VUE2项目启动报错
  • 失败的面试经历(ʘ̥∧ʘ̥)
  • 从过拟合到强化学习:机器学习核心知识全解析
  • 关于playwright的data-testid
  • 深入探索Android Bitmap:从原理到实战
  • 【人工智能基础2】人工神经网络、卷积神经网络基础、循环神经网络、长短时记忆网络
  • 【排序】快速排序
  • Python —— random.choice()的用法
  • 数学——A. K-divisible Sum + D. Exam in MAC
  • Unity屏幕适配——立项时设置
  • 变身 变装 wordpress/广州推广优化
  • 江西赣州疫情最新情况/优化人员是什么意思
  • 门户网站 建设/怎么知道自己的域名
  • 彩票网站开发定制/杭州10大软件开发公司
  • 做视频网站视频放在哪里/可以发广告的100个网站
  • 峰峰专业做网站/百度指数怎么查询