mysql复习

server/2024/11/24 1:37:29/

Mysql三种搜索引擎

Memory

MEMORY是MySQL中一类特殊的存储引擎。它使用存储在内存中的内容来创建表,而且数据全部放在内存中。

底层使用hash和B-树

MyISAM

底层使用B树

采用表级锁来提供并发支持能力

执行读取操作的速度很快,而且不占用大量的内存和存储资源

数据和索引分开存储,减少操作系统的大文件访问情况,以提高性能

单独存储了表的行数数据,统计行数的不用遍历数据

不支持事务

InnoDB

InnoDB为mysql默认的搜索引擎,InnoDB给MySQL的表提供了事务处理、回滚、崩溃修复能力和多版本并发控制的事务安全。现在是mysql的默认存储引擎。使用B+树作为底层

与其它存储引擎不同,InnoDB表能够自动从灾难中恢复,MySQL支持外键的存储引擎只有InnoDB

B+树结构

B+树是应数据所需而出现的一种B树的变形树。一棵m阶的B+树需要满足下列条件:

每个分支节点最多有m棵子树(孩子节点);

非叶根节点至少有两棵子树,其他每个分支节点至少有⌈m/2⌉棵子树;

节点的字数个数与关键字个数相等;

所有叶节点包含全部关键字及指向相应记录的指针,叶节点中将关键字按大小顺序排列,并且相邻叶节点按大小顺序相互链接起来;

所有分支节点(可视为索引的索引)中仅包含他的各个子节点(即下一级的索引块)中关键字的最大值及指向其子节点的指针。

在B+树中,叶节点包含信息,所有非叶节点仅起索引作用,非叶节点的每个索引项只含有对应子树的最大关键字和指向该子树的指针,不含有该关键字对应记录的存储地址。

存储过程

存储过程的定义

存储过程是一组为了完成特定功能的SQL语句集,它存储在数据库中,并允许用户通过指定的名字来调用这组语句集。存储过程可以包含逻辑控制语句、数据操作语句等,并且可以接收输入参数和返回输出结果。

存储过程的创建和执行

创建存储过程:

使用CREATE PROCEDURE语句来创建存储过程。

在创建过程中,可以定义输入参数、输出参数和存储过程的主体(即SQL语句集)。

执行存储过程:

使用CALL语句来执行存储过程。

可以传递必要的输入参数给存储过程,并接收其返回的输出结果。

聚集索引与普通索引

聚集索引

定义:数据行的物理顺序与列值(一般是主键的那一列)的 逻辑顺序相同,一个表中只能拥有一个聚集索引。

聚集索引的好处了,索引的 叶子节点就是对应的数据节点,可以直接获取到对应的全部列的数据,而非聚集索引在索引没有覆盖到对应的列的时候需要进行二次查询

如果不创建索引,系统会自动创建一个隐含列作为表的聚集索引,MySQL里主键就是聚集索引

非聚集索引

定义:该索引中索引的逻辑顺序与磁盘上行的物理存储顺序不同,一个表中可以拥有多个非聚集索引。非聚集索引,分成普通索引,唯一索引,全文索引

非聚集索引叶节点仍然是索引节点,只是有一个指针指向对应的数据块,此如果使用非聚集索引查询,而查询列中包含了其他该索引没有覆盖的列,那么他还要进行第二次的查询,查询节点上对应的数据行的数据。

事务管理

事务的特性ACID

原子性(Atomicity):原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

一致性(Consistency):事务前后数据的完整性必须保持一致。

隔离性(isolation):事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。

持久性(durability):持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

问题

脏读: 对于两个事务 T1, T2, T1 读取了已经被 T2 更新但还**没有被提交**的字段。之后, 若 T2 回滚, T1读取的内容就是临时且无效的。


 不可重复读: 对于两个事务T1, T2, T1 读取了一个字段, 然后 T2 **更新**了该字段。之后, T1再次读取同一个字段, 值就不同了。


 幻读: 对于两个事务T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中**插入**了一些新的行。之后, 如果 T1 再次读取同一个表, 就会多出几行。

隔离级别,mysql默认可重复读

未提交读(READ-UNCOMMITTED),事务中发生了修改,即使没有提交,其他事务也是可见的,比如对于一个数A原来50修改为100,但是我还没有提交修改,另一个事务看到这个修改,而这个时候原事务发生了回滚,这时候A还是50,但是另一个事务看到的A是100.可能会导致脏读、幻读或不可重复读

提交读(READ-COMMITTED),对于一个事务从开始直到提交之前,所做的任何修改是其他事务不可见的,举例就是对于一个数A原来是50,然后提交修改成100,这个时候另一个事务在A提交修改之前,读取的A是50,刚读取完,A就被修改成100,这个时候另一个事务再进行读取发现A就突然变成100了;可以阻止脏读,但是幻读或不可重复读仍有可能发生

可重复读(REPEATABLE-READ),就是对一个记录读取多次的记录是相同的,比如对于一个数A读取的话一直是A,前后两次读取的A是一致的;可以阻止脏读和不可重复读,但幻读仍有可能发生。

可串行化读(SERIALIZABLE),在并发情况下,和串行化的读取的结果是一致的,没有什么不同,比如不会发生脏读和幻读;该级别可以防止脏读、不可重复读以及幻读。

Spring中的事务管理

Spring事务通过管理注解@Transactional控制业务层方法的事务。

异常回滚的属性:rollbackFor

默认情况下,只有出现RuntimeException(运行时异常)才会回滚事务。

假如我们想让所有的异常都回滚,需要来配置@Transactional注解当中的rollbackFor属性,通过rollbackFor这个属性可以指定出现何种异常类型回滚事务。

@Transactional注解当中的rollbackFor属性用于控制出现何种异常类型,回滚事务。

事务传播行为:propagation

@Transactional注解当中的第二个属性propagation,这个属性是用来配置事务的传播行为的。 

什么是事务的传播行为呢?

指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。

要研究事务的传播行为,至少得有两个事务(嵌套事务)

事务传播行为定义了在方法调用链中嵌套事务的创建和使用方式

我们要想控制事务的传播行为,在@Transactional注解的后面指定一个属性propagation,通过 propagation 属性来指定传播行为。


http://www.ppmy.cn/server/144412.html

相关文章

wpf中几种获取ComBox中值的方法

方法一: string test null;foreach (ComboBoxItem item in e.AddedItems){test item.Content.ToString();break;}方法二: ComboBoxItem cbi (ComboBoxItem)(sender as ComboBox).SelectedItem;string selectedText cbi.Content.ToString();方法三…

【愚公系列】《微信小程序与云开发从入门到实践》002-如何设计一款小程序

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主&…

Python棉花病虫害图谱系统CNN识别+AI问答知识neo4j vue+flask深度学习神经网络可视化

文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站,有好处! 功能介绍 编号:F045 🪲 vueflaskneo4jmysql 架构 (前后端分离架构) 🪲 棉花…

深入解析QP算法及其Python实现

目录 深入解析QP算法及其Python实现第一部分:QP算法的基本原理与数学模型1.1 QP问题定义1.2 算法核心思想1.3 应用场景第二部分:QP算法的Python实现(面向对象设计)2.1 核心代码实现第三部分:案例1 - 投资组合优化问题(策略模式)3.1 问题描述3.2 代码实现3.3 设计模式分析…

海外招聘丨挪威科技大学 —博士候选人 机器学习在晶体和连续介质可塑性中的应用

雇主简介 NTNU 是一所面向国际的大学,总部位于特隆赫姆,校区位于约维克和奥勒松。 NTNU 在科学和技术方面具有主要地位,拥有各种专业学习课程,学术广度很大,还包括人文、社会科学、经济学、医学、健康科学、教育科学…

IEC61850读服务器目录命令——GetServerDirectory介绍

IEC61850标准中的GetServerDirectory命令是变电站自动化系统中非常重要的一个功能,它主要用于读取服务器的目录信息,特别是服务器的逻辑设备节点(LDevice)信息。以下是对GetServerDirectory命令的详细介绍。 目录 一、命令功能 …

【随手笔记】电脑端上位机初涉(一)

实现电脑端上位机的方式及其学习难度和知识点 在嵌入式开发中,电脑端上位机程序用于与嵌入式设备进行通信和控制。以下是几种常见的实现方式,以及它们的学习难度和所需的知识点: Python PySerial 学习难度:低知识点:…

分层架构 IM 系统之架构演进

在电商业务日活几百万的情况下,IM 系统采用分层架构方式,如下图。 分层架构的 IM 系统,整体上包含了【终端层】、【入口层】、【业务逻辑层】、【路由层】、【数据访问层】和【存储层】,我们在上篇文章(分层架构 IM 系…