【MySQL进阶】事务、存储引擎、索引、锁

news2024/9/22 10:06:37

一、事务

1.概念 

事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向 系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

例子:转账,要求扣钱和进账同时成功

默认MySQL的事务自动提交,也就是说,当执行一条DML语句,MySQL会立即隐式的提交事务。

2.事务操作

(1)方法1

当设置为手动提交之后,在执行任何DML语句时,都要在最后添加commit语句才能提交成功

如果出现异常,不要提交,而是需要执行rollback语句,将更改的部分数据进行恢复

(2)方法2

3.事务的四大特性

一致性指的是能量守恒

4.并发事务问题

(1)脏读(未提交)

(2)不可重复读(提交后)

(3)幻读

5.事务隔离级别

在最后一个隔离级别(级别最高,数据最安全,但性能最差)下,解决了三个并发事务问题

mysql中的默认隔离级别是repeatable read

二、存储引擎/表类型

1.MySQL体系结构

存储引擎控制数据存储方式,数据库服务器通过API与其交互

2.概念

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。
创建表的时候可以指定存储引擎,不指定的话默认是InnoDB

3.InnoDB

InnoDB的逻辑存储结构:

 4.MyISAM

5.Memory

 6.区别

7.选择

存储引擎没有好坏之分,需要根据业务选择合适的,绝大多数还是选择InnoDB

三、索引

1.概念

索引是帮助MySQL高效获取数据数据结构(有序),这些数据结构以某种方式引用(指向)数据,这种数据结构就是索引

2.引入

不加索引时,要查询某一条数据,需要全表扫描

加上索引时,查询更加高效

优势:提高查询效率、提高排序效率

劣势:索引列占空间、降低更新表的速度

3.索引结构

索引是在存储引擎层实现的,不同的存储引擎有不同的结构:(如果没有特别指明,都是指的B+Tree索引)

(1)引入二叉树

红黑树:自平衡二叉查找树

(2)引入Btree(多路平衡查找树)

叶子结点和非叶子结点都会存放数据

中间元素向上分裂 

 (3)B+Tree结构

所有数据都会存到叶子结点,叶子结点形成了一个单向链表

中间元素向上分裂 的同时,要把此元素在叶子结点也保留,同时用单向链表

(4)Hash结构

(5)思考

4.索引分类

回表查询:如果通过姓名想查询到所在的这一行数据,需要先在二级索引中查到ID,再通过聚集索引查到一行数据,因此根据ID查效率更高

 5.索引语法

创建索引:

创建联合索引:多个字段同时加上索引,字段的顺序有讲究(使用最频繁的字段放在左侧)

删除索引:

6.性能分析

(1)SQL执行频率
 (2)慢查询日志

通过慢查询日志来定位执行效率比较低(超过预设的执行时间)的SQL语句,进而优化

(3)profiles查看耗时

如果有些简单的指令即使没有被记录到慢查询日志中,但是效率也很低,怎么查看具体用时明细?

查看每一条SQL的耗时情况:

查看一条语句各个阶段的耗时情况:

(4)explain

四、锁

1.概念

2.分类

3.全局锁---实现数据备份

(1)使用场景

对整个数据库实例加锁,处于只读状态,后续的更新操作语句都将被阻塞

典型的使用场景是:做全库的逻辑备份,获取一致性视图,保证数据的完整性

注意:备份不要在mysql命令中执行,而是在windows中的命令行执行

(2)特点

(3)不加锁的备份

4.表级锁

(1)使用场景

(2)分类

(3)表锁

读锁不会阻塞其他客户端的读,但是会阻塞写

写锁既会阻塞其他客户端的读,又会阻塞其他客户端的写

(4)元数据锁

(5)意向锁

当线程A加了行锁之后,如果线程B要加表锁,需要一行行检查数据是否加了锁

线程A在加了行锁之后再对整张表加意向锁,线程B通过看表锁与意向锁是否兼容来决定是否添加表锁,如果不兼容,就会阻塞,直到线程A提交释放锁

意向锁与表锁之间的兼容情况:

5.行级锁

(1)使用场景

(2)分类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2042176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0开始搭建vue + flask 旅游景点数据分析系统(九):旅游景点管理之增删改查

这一期来做旅游景点数据的增删改查 先看下我们做好的效果是这样的: ## 1 后台接口 这里的接口已经考虑到了分页的情况,因为前端的表格是带有分页的,接受的前端传过来的get参数为 title 、page、 limit ,titie是查询的关键词&…

C#学习笔记15:上位机助手_usercontrol窗体内嵌的应用

今日完善一下之前的上位机助手,做一个组合窗体内嵌的多功能助手软件应用, 与之前的上位机软件相比: 更注重控件能够随着窗体缩放而缩放变换,串口助手部分能自动后台检测串口设备,解决市面上大部分串口助手的打开初始化会卡顿的问题 ( 多线程后…

Android全面解析之context机制(三): 从源码角度分析context创建流程(下)

前言 前面已经讲了什么是context以及从源码角度分析context创建流程(上)。限于篇幅把四大组件中的广播和内容提供器的context获取流程放在了这篇文章。广播和内容提供器并不是context家族里的一员,所以他们本身并不是context,因而…

Spring日志

1.日志的作用 定位和发现问题(主要)系统监控数据采集日志审计...... 2.日志的使用 2.1 ⽇志格式的说明 2.2 打印日志 Spring集成了日志框架,直接使用即可 步骤: 1.定义日志对象 2.使⽤⽇志对象打印⽇志 RestController public class LoggerController {private static Logger…

Ecovadis认证评估什么 Ecovadis认证有哪些注意事

Ecovadis认证是一个全球性的企业可持续性评估平台,它通过评估企业在环境、劳工与人权、公平商业实践、可持续采购等四个领域的表现,帮助企业识别潜在风险,提升ESG(环境、社会和公司治理)绩效,实现可持续发展 Ecovadis认证注意事项…

Linux-文件系统与日志分析

系列文章目录 提示:仅用于个人学习,进行查漏补缺使用。 1.Linux介绍、目录结构、文件基本属性、Shell 2.Linux常用命令 3.Linux文件管理 4.Linux 命令安装(rpm、install) 5.Linux账号管理 6.Linux文件/目录权限管理 7.Linux磁盘管理/文件系统 8.Linu…

MapReduce 简单介绍

MapReduce 一、MapReduce概述二、MapReduce 基本设计思想分而治之2.2 抽象成模型2.3 上升到框架 三、MapReduce 优缺点3.1 MapReduce 的优点3.1 MapReduce 的缺点 四、MapReduce 编程模型4.1 MapReduce 分布式计算原理4.2 MapReduce 编程模型4.3 剖析 MapReduce 编程模型4.3.1 …

好书推荐!《Building LLM Apps》构建大语言模型LLM应用!一次性讲清楚!

《Building LLM Apps》这本书是一份全面而实用的指南,它不仅介绍了大型语言模型(LLM)的基础知识和前沿技术,还深入探讨了如何将这些模型应用到实际的AI应用中。 书中从对LLM的深入介绍入手,接着探讨了包括GPT 3.5、GP…

RxJava在Android中的应用

RxJava是一个基于事件流、异步和响应式编程的库,它在Android开发中广泛用于简化异步操作和事件处理。通过RxJava,我们可以以声明式方式管理异步任务,并有效整合多个数据源。 1. RxJava核心组件介绍 1.1 Observable与Observer Observable&a…

大模型面试系列-大模型算法工程师的面试题目与解答技巧详细说明

大家好,我是微学AI,今天给大家介绍一下大模型面试系列-大模型算法工程师的面试题目与解答技巧详细说明。 文章目录 大模型算法工程师面试题1. Llama 2 中使用的注意力机制是什么?描述一下查询分组注意力。2. LangChain 的结构详细描述一下。…

2024年8月15日嵌入式学习

今日主要学习线程和线程的互斥锁 pthread_cancel函数 它用于取消一个线程,当一个线程收到取消的申请时,他不会立即停止,而是在下一个取消点处结束运行,取消点是程序中一个特定的位置。如果线程在执行一个不可中断的系统调用&…

网络安全风险扫描原理及工具使用

课程目标 1.熟悉常见网络安全风险扫描工具 2.了解网络安全风险扫描原理 3.掌握扫描工具使用方法 为什么要做网络安全风险扫描? 什么是网络安全风险扫描? 通过一定的技术手段发现系统和软件存在的安全漏洞、弱口令 网络安全风险扫描的目的&#xff1…

【AI 绘画】web_ui 搭建(基于gradio)

AI 绘画- web_ui 搭建(基于gradio) 1. 内容介绍 Gradio的优势在于易用性,代码结构相比Streamlit简单,只需简单定义输入和输出接口即可快速构建简单的交互页面,更轻松部署模型。适合场景相对简单,想要快速部署应用的开发者。便于分享:gradio可以在启动应用时设置share=…

QT文件操作实战

QT文件操作实战 页面布局如下 读取文件:文件→界面文本框 采用“浏览”按钮的槽函数,编写的代码如下 void Widget::on_pushButton_clicked() {//读取txt文件,获取要打开的文件名,并将文件名(包含)填入lineEdit中// QString fileName = QFileDialog::getOpenFileName(th…

云HIS平台源码,云医院管理信息系统源码,云HIS医疗卫生管理系统源码

云医院管理信息系统源码,云HIS医疗卫生管理系统源码,医疗云HIS系统源码,自主版权二级医院应用案例 云HIS平台采用SaaS服务模式,软件使用者无需购置额外硬件设备、软件许可证及安装和维护软件系统,通过互联网浏览器在任…

YS9082HP量产工具,支持N38B开卡(ID:89D3AC32C204),解决YS9082HP N38B开卡到87%报错,状态8817,Fail:写表失败

收的固态硬盘,主控是YS9082HP,颗粒是Intel的N38B: 从网上找了个YS9082HP_MPToolV8.00.00.01.025_HPS2704M_release_N38B版本试试,倒是能识别颗粒,到87%就报错,Fail:写表失败,错误状态是8817&…

山东易注册网络科技有限公司:合伙人模式的机遇与创新

在互联网高速发展的今天,合伙人模式成为网络运营的新趋势。山东易注册网络科技有限公司以其创新的合伙人模式,为用户带来了前所未有的机遇。 加入山东易注册的合伙人,可以享受到独立搭建系统和独立服务器的权益。用户可以打造自己的独立域名和…

怎样用python函数画图像

打开Python的shell界面,如图所示。(注意我们需要已经安装了matplotlib库包)。 输入以下代码,导入我们用到的函数库。 >>> import numpy as np >>> import matplotlib.pyplot as plt 产生我们要画的的函数的数据…

数据集的简单制作和使用

数据集的简单制作和使用 参考资料:Labelme分割标注软件使用 使用labelme软件对数据集进行分割 每张图片获得一个json文件 我们看看其中一个文件,内容包含每个点在图片中的位置 我们可以自己写一个脚本(或使用别人的)将上述json…

突破传统看车局限,3DCAT实时云渲染为东风日产奇骏赋能

在当今数字化飞速发展的时代,汽车行业的营销也面临着诸多变革与挑战。线下展示由于受到场地空间的限制,往往无法全面展示所有车型,且建设成本高昂。而一些销售门店可能因位置偏僻等因素,导致客户上门看车、试驾的邀约变得困难重重…